From 00c8a90a695432943692e173bb3d41e5bdfde5a4 Mon Sep 17 00:00:00 2001 From: Matt Date: Mon, 31 May 2021 16:49:14 -0700 Subject: [PATCH 01/10] migrate domain --- core-tests/pom.xml | 4 +-- core/pom.xml | 4 +-- .../argument/types/AbstractArgument.java | 16 ++++++++++ .../branch/nodes/argument/types/Argument.java | 13 ++++++-- .../nodes/argument/types/StringArgument.java | 30 +++++++++++++++++++ .../argument/types/UncalculatingArgument.java | 4 --- pom.xml | 22 ++------------ spigot-impl/pom.xml | 11 ++----- .../aurium/branch/spigot/CommandWrapper.java | 5 ++-- .../aurium/branch/spigot/SpigotManager.java | 2 +- 10 files changed, 68 insertions(+), 43 deletions(-) create mode 100644 core/src/main/java/me/aurium/branch/nodes/argument/types/AbstractArgument.java create mode 100644 core/src/main/java/me/aurium/branch/nodes/argument/types/StringArgument.java delete mode 100644 core/src/main/java/me/aurium/branch/nodes/argument/types/UncalculatingArgument.java diff --git a/core-tests/pom.xml b/core-tests/pom.xml index 341cfa7..09d482d 100644 --- a/core-tests/pom.xml +++ b/core-tests/pom.xml @@ -27,7 +27,7 @@ branch - me.aurium + xyz.auriium 0.1.0 @@ -42,7 +42,7 @@ branch-core - me.aurium + xyz.auriium 0.1.0 diff --git a/core/pom.xml b/core/pom.xml index b7479b7..657f439 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -25,7 +25,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> branch - me.aurium + xyz.auriium 0.1.0 4.0.0 @@ -51,6 +51,4 @@ - - \ No newline at end of file diff --git a/core/src/main/java/me/aurium/branch/nodes/argument/types/AbstractArgument.java b/core/src/main/java/me/aurium/branch/nodes/argument/types/AbstractArgument.java new file mode 100644 index 0000000..b48f087 --- /dev/null +++ b/core/src/main/java/me/aurium/branch/nodes/argument/types/AbstractArgument.java @@ -0,0 +1,16 @@ +package me.aurium.branch.nodes.argument.types; + +public abstract class AbstractArgument implements Argument { + + protected final String label; + + public AbstractArgument(String label) { + this.label = label; + } + + @Override + public String getLabel() { + return label; + } + +} diff --git a/core/src/main/java/me/aurium/branch/nodes/argument/types/Argument.java b/core/src/main/java/me/aurium/branch/nodes/argument/types/Argument.java index 9665d8b..a8dd5f1 100644 --- a/core/src/main/java/me/aurium/branch/nodes/argument/types/Argument.java +++ b/core/src/main/java/me/aurium/branch/nodes/argument/types/Argument.java @@ -23,6 +23,7 @@ import me.aurium.branch.execution.Block; import me.aurium.branch.execution.NodeContext; +import me.aurium.branch.nodes.results.model.Result; import java.util.List; import java.util.Optional; @@ -48,9 +49,17 @@ public interface Argument { */ List getBounds(NodeContext context); - boolean check(Block toParse); - T parse(Block block); + /** + * Attempts to parse the value + * @param context the targeted context + * @return the result if present or a failure if not. + */ + Result parse(NodeContext context); + /** + * Returns the default value of the argument if it is present. If it is not present the argument is not optional. + * @return the presence of the argument value + */ Optional getDefault(); } diff --git a/core/src/main/java/me/aurium/branch/nodes/argument/types/StringArgument.java b/core/src/main/java/me/aurium/branch/nodes/argument/types/StringArgument.java new file mode 100644 index 0000000..acdbb51 --- /dev/null +++ b/core/src/main/java/me/aurium/branch/nodes/argument/types/StringArgument.java @@ -0,0 +1,30 @@ +package me.aurium.branch.nodes.argument.types; + +import me.aurium.branch.execution.Block; +import me.aurium.branch.execution.NodeContext; +import me.aurium.branch.nodes.results.model.Result; + +import java.util.List; +import java.util.Optional; + +public class StringArgument extends AbstractArgument { + + public StringArgument(String label) { + super(label); + } + + @Override + public List getBounds(NodeContext context) { + return null; + } + + @Override + public Result parse(NodeContext context) { + return null; + } + + @Override + public Optional getDefault() { + return Optional.empty(); + } +} diff --git a/core/src/main/java/me/aurium/branch/nodes/argument/types/UncalculatingArgument.java b/core/src/main/java/me/aurium/branch/nodes/argument/types/UncalculatingArgument.java deleted file mode 100644 index 8ea5b75..0000000 --- a/core/src/main/java/me/aurium/branch/nodes/argument/types/UncalculatingArgument.java +++ /dev/null @@ -1,4 +0,0 @@ -package me.aurium.branch.nodes.argument.types; - -public interface UncalculatingArgument { -} diff --git a/pom.xml b/pom.xml index 31d7368..79850f2 100644 --- a/pom.xml +++ b/pom.xml @@ -30,9 +30,9 @@ 0.1.0 - me.aurium + xyz.auriium insect - 0.2.1 + 0.3.0 @@ -46,22 +46,4 @@ ${compiler.version} - - - - branch-core - me.aurium - ${project.version} - - - - - - - jfrog - a0phrw82hnl4g-artifactory-primary-0-releases - https://aurium.jfrog.io/artifactory/aurium-libs-release-local - - - \ No newline at end of file diff --git a/spigot-impl/pom.xml b/spigot-impl/pom.xml index a4e66d9..6ab95e3 100644 --- a/spigot-impl/pom.xml +++ b/spigot-impl/pom.xml @@ -25,7 +25,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> branch - me.aurium + xyz.auriium 0.1.0 4.0.0 @@ -39,14 +39,9 @@ - me.aurium + xyz.auriium branch-core - - - com.destroystokyo.paper - paper-api - 1.16.5-R0.1-SNAPSHOT - provided + 0.1.0 org.spigotmc diff --git a/spigot-impl/src/main/java/me/aurium/branch/spigot/CommandWrapper.java b/spigot-impl/src/main/java/me/aurium/branch/spigot/CommandWrapper.java index a30ae1e..8b47ef6 100644 --- a/spigot-impl/src/main/java/me/aurium/branch/spigot/CommandWrapper.java +++ b/spigot-impl/src/main/java/me/aurium/branch/spigot/CommandWrapper.java @@ -24,7 +24,6 @@ import me.aurium.branch.centralized.base.NodeBase; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; -import org.jetbrains.annotations.NotNull; import java.util.List; @@ -38,14 +37,14 @@ public CommandWrapper(NodeBase base) { } @Override - public boolean execute(@NotNull CommandSender commandSender, @NotNull String s, String[] strings) { + public boolean execute(CommandSender commandSender, String s, String[] strings) { base.execute(commandSender, s, strings); return true; } @Override - public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, String[] args) throws IllegalArgumentException { + public List tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException { return base.suggest(sender, alias, args); } } diff --git a/spigot-impl/src/main/java/me/aurium/branch/spigot/SpigotManager.java b/spigot-impl/src/main/java/me/aurium/branch/spigot/SpigotManager.java index a6629e9..1540d98 100644 --- a/spigot-impl/src/main/java/me/aurium/branch/spigot/SpigotManager.java +++ b/spigot-impl/src/main/java/me/aurium/branch/spigot/SpigotManager.java @@ -58,7 +58,7 @@ public SpigotManager() { @Override public CentralizedManagerBinder getBinder(JavaPlugin platform) { - return new SpigotManagerBinder(platform.getName(), platform.getServer().getCommandMap(), senders); + return new SpigotManagerBinder(platform.getName(), null, senders); } @Override From e6f1bcfb11f912f3a42f369a916b36e6a28ec8d6 Mon Sep 17 00:00:00 2001 From: Matt Date: Mon, 14 Jun 2021 23:56:29 -0700 Subject: [PATCH 02/10] modify --- docs/_coverpage.md | 4 ++-- pom.xml | 14 ++++++++++---- .../test/java/me/aurium/beetle/KitpvpCommand.java | 9 +++++++++ 3 files changed, 21 insertions(+), 6 deletions(-) create mode 100644 spigot-impl/src/test/java/me/aurium/beetle/KitpvpCommand.java diff --git a/docs/_coverpage.md b/docs/_coverpage.md index fa401c7..43ef131 100644 --- a/docs/_coverpage.md +++ b/docs/_coverpage.md @@ -1,6 +1,6 @@ ![logo](media/branch.png) -# branch framework 1.0 +# branch framework 1.0.0 > A powerful Java command framework @@ -9,5 +9,5 @@ - Annotations, or builder format - Easy for beginners, flexible enough for experienced devs -[GitHub](https://github.com/docsifyjs/docsify/) +[Source](https://github.com/docsifyjs/docsify/) [Get Started](#docsify) \ No newline at end of file diff --git a/pom.xml b/pom.xml index 79850f2..761a796 100644 --- a/pom.xml +++ b/pom.xml @@ -25,16 +25,22 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - branch - pom - 0.1.0 - xyz.auriium insect 0.3.0 + branch + pom + 0.1.0 + + + scm:git:https://github.com/Auriium/Branch.git + + + + core core-tests diff --git a/spigot-impl/src/test/java/me/aurium/beetle/KitpvpCommand.java b/spigot-impl/src/test/java/me/aurium/beetle/KitpvpCommand.java new file mode 100644 index 0000000..6e0e7e9 --- /dev/null +++ b/spigot-impl/src/test/java/me/aurium/beetle/KitpvpCommand.java @@ -0,0 +1,9 @@ +package me.aurium.beetle; + + +public class KitpvpCommand { + + + + +} From 0feb2e287062aeede0b8cc3376494a5767909fde Mon Sep 17 00:00:00 2001 From: Matt Date: Tue, 27 Jul 2021 16:31:17 -0700 Subject: [PATCH 03/10] modernize (arguments) --- {core => branch-core}/pom.xml | 9 ++ .../centralized/CentralizedManager.java | 18 +-- .../centralized/CentralizedManagerBinder.java | 2 +- .../branch/centralized/NodeSource.java | 22 ++++ .../centralized/base/AbstractNodeBase.java | 102 +++++++++++++++++ .../centralized/base/DelegatingNodeBase.java | 32 ++++++ .../branch/centralized/base/NodeBase.java | 61 ++++++++++ .../centralized/base/NodeBaseBuilder.java | 36 +++--- .../branch/centralized/base/RunNodeBase.java | 25 +++++ .../typeadapter/CommonAdapter.java | 4 +- .../typeadapter/ManagerAdapter.java | 4 +- .../centralized/typeadapter/ReduxAdapter.java | 16 +++ .../typeadapter/StandardCommonAdapter.java | 2 +- .../branch/execution/AbstractNodeContext.java | 6 +- .../xyz/auriium}/branch/execution/Block.java | 2 +- .../branch/execution/ContextProvider.java | 6 +- .../execution/EmptyExecutionHandler.java | 4 +- .../execution/EmptySuggestionHandler.java | 4 +- .../branch/execution/NodeContext.java | 24 +++- .../branch/execution/StringBlock.java | 2 +- .../branch/execution/api/ArgExecution.java | 26 +++++ .../branch/execution/api/BasicExecution.java | 20 ++++ .../branch/execution/api/Execution.java | 14 ++- .../execution/api/ExecutionHandler.java | 4 +- .../execution/api/SuggestionHandler.java | 6 +- .../fallback/permissions/EmptyPermission.java | 2 +- .../fallback/permissions/Permission.java | 4 +- .../permissions/PredicatePermission.java | 2 +- .../permissions/StringPermission.java | 20 ++++ .../strategies/FallbackSearchStrategy.java | 8 +- .../fallback/strategies/OneBackStrategy.java | 12 +- .../strategies/PermissionLockoutStrategy.java | 12 +- .../auriium}/branch/interfacing/Message.java | 2 +- .../auriium}/branch/interfacing/Response.java | 2 +- .../branch/interfacing/ResponseAction.java | 2 +- .../handlers/CommonInterfacingHandler.java | 8 +- .../handlers/DelegatingDefaultMap.java | 6 +- .../branch/interfacing/handlers/InnerMap.java | 6 +- .../handlers/InterfacingHandler.java | 8 +- .../interfacing/handlers/MessageMap.java | 7 +- .../information/description/Description.java | 2 +- .../description/GeneratingDescription.java | 22 ++++ .../LazyGeneratingDescription.java | 28 +++++ .../description/StringDescription.java | 5 +- .../information/help/HelpEntry.java | 2 +- .../interfacing}/information/help/Shit.java | 2 +- .../responses/FailedAdaptingResponse.java | 4 +- .../responses/NoIntegratedArgsResponse.java | 6 +- .../responses/NoPermissionResponse.java | 4 +- .../responses/TooManyArgsResponse.java | 4 +- .../xyz/auriium}/branch/nodes/Builder.java | 2 +- .../auriium}/branch/nodes/CommandNode.java | 20 ++-- .../auriium/branch/nodes}/EndpointNode.java | 10 +- .../branch/nodes/IdentifiableNode.java | 5 +- .../branch/nodes/ResponseHandler.java | 2 +- .../nodes/argument/AbstractArgNode.java | 60 ++++++++++ .../branch/nodes/argument/ArgNode.java | 65 +++++++++++ .../nodes/argument/ArgumentContext.java | 27 +++-- .../argument/ArgumentContextHandler.java | 7 +- .../branch/nodes/argument/Arguments.java | 23 +++- .../argument/ContextualBaseArgument.java | 60 ++++++++++ .../nodes/argument/IgnorantBaseArgument.java | 8 ++ .../argument/SingleContextualArgument.java | 21 ++++ .../argument/SingleIgnorantArgument.java | 4 + .../argument/implement/DefaultingArgNode.java | 13 +++ .../implement/ImplementableArgNode.java | 19 ++++ .../nodes/argument/types/StringArgument.java | 39 +++++++ .../branch/nodes/branching/BranchingNode.java | 78 +++++-------- .../branching/ExclusiveBranchingBuilder.java | 33 +++--- .../branching/ExclusivePrestoredSet.java | 6 +- .../branching/InclusiveBranchingBuilder.java | 34 +++--- .../branching/InclusivePrestoredSet.java | 5 +- .../branch/nodes/branching/PrestoredSet.java | 6 +- .../auriium/branch/nodes/help/HelpNode.java | 96 ++++++++++++++++ .../branch/nodes/proxy}/ProxyNode.java | 2 +- .../branch/nodes/results/SearchInfo.java | 20 +++- .../branch/nodes/results/SearchInput.java | 10 +- .../nodes/results/model/FailingResult.java | 4 +- .../branch/nodes/results/model/Result.java | 12 +- .../nodes/results/model/SuccessfulResult.java | 4 +- .../nodes/single/AbstractSingleNode.java | 32 ++++++ .../branch/nodes/single/SingleNode.java | 52 +++++++++ .../nodes/single/SingleNodeBuilder.java | 52 +++++++++ .../implement/DefaultingSingleNode.java | 22 ++++ .../implement/ImplementableSingleNode.java | 17 +++ branch-core/src/test/java/ExecutionTest.java | 67 +++++++++++ .../auriium}/branch/tests/StringAdapter.java | 4 +- .../auriium}/branch/tests/StringManager.java | 29 +++-- branch-spigot-impl/branch-spigot-impl.iml | 22 ++++ {spigot-impl => branch-spigot-impl}/pom.xml | 0 .../branch/spigot/CommandWrapper.java | 4 +- .../auriium}/branch/spigot/SpigotContext.java | 17 ++- .../branch/spigot/SpigotContextProvider.java | 12 +- .../auriium}/branch/spigot/SpigotManager.java | 43 ++++--- .../branch/spigot/SpigotManagerBinder.java | 6 +- .../branch/spigot/adapter/PlayerAdapter.java | 6 +- .../branch/spigot/adapter/SenderAdapter.java | 4 +- .../spigot/message/FormattedMessage.java | 4 +- .../spigot/message/SpigotMessageMap.java | 12 +- .../branch/spigot/message/TextMessage.java | 4 +- .../spigot/permisison/SpigotPermission.java | 4 +- .../java/me/aurium/beetle/KitpvpCommand.java | 0 .../branch/spigot/ExampleBinding.java | 2 +- .../src/test/resources/plugin.yml | 0 core-tests/core-tests.iml | 2 - core-tests/pom.xml | 75 ------------- .../java/me/aurium/branch/ExecutionTest.java | 34 ------ .../aurium/branch/centralized/NodeSource.java | 14 --- .../centralized/base/AdaptingNodeBase.java | 86 -------------- .../centralized/base/DelegatingNodeBase.java | 35 ------ .../branch/centralized/base/NodeBase.java | 45 -------- .../branch/execution/api/Execution.java | 44 -------- .../aurium/branch/nodes/argument/ArgNode.java | 74 ------------ .../nodes/argument/ArgumentConverter.java | 25 ----- .../branch/nodes/argument/ArgumentNode.java | 101 ----------------- .../argument/types/AbstractArgument.java | 16 --- .../branch/nodes/argument/types/Argument.java | 65 ----------- .../nodes/argument/types/StringArgument.java | 30 ----- .../aurium/branch/nodes/single/HelpNode.java | 54 --------- .../branch/nodes/single/SingleBuilder.java | 72 ------------ .../branch/nodes/single/SingleNode.java | 106 ------------------ pom.xml | 5 +- readme.md | 11 ++ 123 files changed, 1448 insertions(+), 1187 deletions(-) rename {core => branch-core}/pom.xml (88%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/centralized/CentralizedManager.java (66%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/centralized/CentralizedManagerBinder.java (96%) create mode 100644 branch-core/src/main/java/xyz/auriium/branch/centralized/NodeSource.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/centralized/base/AbstractNodeBase.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/centralized/base/DelegatingNodeBase.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/centralized/base/NodeBase.java rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/centralized/base/NodeBaseBuilder.java (67%) create mode 100644 branch-core/src/main/java/xyz/auriium/branch/centralized/base/RunNodeBase.java rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/centralized/typeadapter/CommonAdapter.java (91%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/centralized/typeadapter/ManagerAdapter.java (91%) create mode 100644 branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/ReduxAdapter.java rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/centralized/typeadapter/StandardCommonAdapter.java (94%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/execution/AbstractNodeContext.java (93%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/execution/Block.java (96%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/execution/ContextProvider.java (88%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/execution/EmptyExecutionHandler.java (90%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/execution/EmptySuggestionHandler.java (91%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/execution/NodeContext.java (70%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/execution/StringBlock.java (97%) create mode 100644 branch-core/src/main/java/xyz/auriium/branch/execution/api/ArgExecution.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/execution/api/BasicExecution.java rename core/src/main/java/me/aurium/branch/nodes/argument/ArgumentContext.java => branch-core/src/main/java/xyz/auriium/branch/execution/api/Execution.java (69%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/execution/api/ExecutionHandler.java (91%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/execution/api/SuggestionHandler.java (88%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/fallback/permissions/EmptyPermission.java (95%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/fallback/permissions/Permission.java (93%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/fallback/permissions/PredicatePermission.java (96%) create mode 100644 branch-core/src/main/java/xyz/auriium/branch/fallback/permissions/StringPermission.java rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/fallback/strategies/FallbackSearchStrategy.java (85%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/fallback/strategies/OneBackStrategy.java (92%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/fallback/strategies/PermissionLockoutStrategy.java (83%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/interfacing/Message.java (96%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/interfacing/Response.java (95%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/interfacing/ResponseAction.java (96%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/interfacing/handlers/CommonInterfacingHandler.java (90%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/interfacing/handlers/DelegatingDefaultMap.java (89%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/interfacing/handlers/InnerMap.java (89%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/interfacing/handlers/InterfacingHandler.java (83%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/interfacing/handlers/MessageMap.java (83%) rename {core/src/main/java/me/aurium/branch => branch-core/src/main/java/xyz/auriium/branch/interfacing}/information/description/Description.java (93%) create mode 100644 branch-core/src/main/java/xyz/auriium/branch/interfacing/information/description/GeneratingDescription.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/interfacing/information/description/LazyGeneratingDescription.java rename {core/src/main/java/me/aurium/branch => branch-core/src/main/java/xyz/auriium/branch/interfacing}/information/description/StringDescription.java (70%) rename {core/src/main/java/me/aurium/branch => branch-core/src/main/java/xyz/auriium/branch/interfacing}/information/help/HelpEntry.java (93%) rename {core/src/main/java/me/aurium/branch => branch-core/src/main/java/xyz/auriium/branch/interfacing}/information/help/Shit.java (93%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/interfacing/responses/FailedAdaptingResponse.java (93%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/interfacing/responses/NoIntegratedArgsResponse.java (90%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/interfacing/responses/NoPermissionResponse.java (91%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/interfacing/responses/TooManyArgsResponse.java (92%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/nodes/Builder.java (96%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/nodes/CommandNode.java (69%) rename {core/src/main/java/me/aurium/branch/nodes/single => branch-core/src/main/java/xyz/auriium/branch/nodes}/EndpointNode.java (82%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/nodes/IdentifiableNode.java (86%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/nodes/ResponseHandler.java (96%) create mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/argument/AbstractArgNode.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ArgNode.java rename core/src/main/java/me/aurium/branch/execution/api/BranchHandler.java => branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ArgumentContext.java (60%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/nodes/argument/ArgumentContextHandler.java (84%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/nodes/argument/Arguments.java (58%) create mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ContextualBaseArgument.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/argument/IgnorantBaseArgument.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/argument/SingleContextualArgument.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/argument/SingleIgnorantArgument.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/argument/implement/DefaultingArgNode.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/argument/implement/ImplementableArgNode.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/argument/types/StringArgument.java rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/nodes/branching/BranchingNode.java (60%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/nodes/branching/ExclusiveBranchingBuilder.java (69%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/nodes/branching/ExclusivePrestoredSet.java (80%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/nodes/branching/InclusiveBranchingBuilder.java (77%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/nodes/branching/InclusivePrestoredSet.java (81%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/nodes/branching/PrestoredSet.java (50%) create mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/help/HelpNode.java rename {core/src/main/java/me/aurium/branch/nodes => branch-core/src/main/java/xyz/auriium/branch/nodes/proxy}/ProxyNode.java (76%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/nodes/results/SearchInfo.java (71%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/nodes/results/SearchInput.java (87%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/nodes/results/model/FailingResult.java (93%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/nodes/results/model/Result.java (75%) rename {core/src/main/java/me/aurium => branch-core/src/main/java/xyz/auriium}/branch/nodes/results/model/SuccessfulResult.java (92%) create mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/single/AbstractSingleNode.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/single/SingleNode.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/single/SingleNodeBuilder.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/single/implement/DefaultingSingleNode.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/single/implement/ImplementableSingleNode.java create mode 100644 branch-core/src/test/java/ExecutionTest.java rename {core-tests/src/main/java/me/aurium => branch-core/src/test/java/xyz/auriium}/branch/tests/StringAdapter.java (89%) rename {core-tests/src/main/java/me/aurium => branch-core/src/test/java/xyz/auriium}/branch/tests/StringManager.java (64%) create mode 100644 branch-spigot-impl/branch-spigot-impl.iml rename {spigot-impl => branch-spigot-impl}/pom.xml (100%) rename {spigot-impl/src/main/java/me/aurium => branch-spigot-impl/src/main/java/xyz/auriium}/branch/spigot/CommandWrapper.java (94%) rename {spigot-impl/src/main/java/me/aurium => branch-spigot-impl/src/main/java/xyz/auriium}/branch/spigot/SpigotContext.java (78%) rename {spigot-impl/src/main/java/me/aurium => branch-spigot-impl/src/main/java/xyz/auriium}/branch/spigot/SpigotContextProvider.java (81%) rename {spigot-impl/src/main/java/me/aurium => branch-spigot-impl/src/main/java/xyz/auriium}/branch/spigot/SpigotManager.java (67%) rename {spigot-impl/src/main/java/me/aurium => branch-spigot-impl/src/main/java/xyz/auriium}/branch/spigot/SpigotManagerBinder.java (90%) rename {spigot-impl/src/main/java/me/aurium => branch-spigot-impl/src/main/java/xyz/auriium}/branch/spigot/adapter/PlayerAdapter.java (88%) rename {spigot-impl/src/main/java/me/aurium => branch-spigot-impl/src/main/java/xyz/auriium}/branch/spigot/adapter/SenderAdapter.java (89%) rename {spigot-impl/src/main/java/me/aurium => branch-spigot-impl/src/main/java/xyz/auriium}/branch/spigot/message/FormattedMessage.java (92%) rename {spigot-impl/src/main/java/me/aurium => branch-spigot-impl/src/main/java/xyz/auriium}/branch/spigot/message/SpigotMessageMap.java (81%) rename {spigot-impl/src/main/java/me/aurium => branch-spigot-impl/src/main/java/xyz/auriium}/branch/spigot/message/TextMessage.java (93%) rename {spigot-impl/src/main/java/me/aurium => branch-spigot-impl/src/main/java/xyz/auriium}/branch/spigot/permisison/SpigotPermission.java (82%) rename {spigot-impl => branch-spigot-impl}/src/test/java/me/aurium/beetle/KitpvpCommand.java (100%) rename {spigot-impl/src/test/java/me/aurium => branch-spigot-impl/src/test/java/xyz/auriium}/branch/spigot/ExampleBinding.java (96%) rename {spigot-impl => branch-spigot-impl}/src/test/resources/plugin.yml (100%) delete mode 100644 core-tests/core-tests.iml delete mode 100644 core-tests/pom.xml delete mode 100644 core-tests/src/test/java/me/aurium/branch/ExecutionTest.java delete mode 100644 core/src/main/java/me/aurium/branch/centralized/NodeSource.java delete mode 100644 core/src/main/java/me/aurium/branch/centralized/base/AdaptingNodeBase.java delete mode 100644 core/src/main/java/me/aurium/branch/centralized/base/DelegatingNodeBase.java delete mode 100644 core/src/main/java/me/aurium/branch/centralized/base/NodeBase.java delete mode 100644 core/src/main/java/me/aurium/branch/execution/api/Execution.java delete mode 100644 core/src/main/java/me/aurium/branch/nodes/argument/ArgNode.java delete mode 100644 core/src/main/java/me/aurium/branch/nodes/argument/ArgumentConverter.java delete mode 100644 core/src/main/java/me/aurium/branch/nodes/argument/ArgumentNode.java delete mode 100644 core/src/main/java/me/aurium/branch/nodes/argument/types/AbstractArgument.java delete mode 100644 core/src/main/java/me/aurium/branch/nodes/argument/types/Argument.java delete mode 100644 core/src/main/java/me/aurium/branch/nodes/argument/types/StringArgument.java delete mode 100644 core/src/main/java/me/aurium/branch/nodes/single/HelpNode.java delete mode 100644 core/src/main/java/me/aurium/branch/nodes/single/SingleBuilder.java delete mode 100644 core/src/main/java/me/aurium/branch/nodes/single/SingleNode.java diff --git a/core/pom.xml b/branch-core/pom.xml similarity index 88% rename from core/pom.xml rename to branch-core/pom.xml index 657f439..b6770e1 100644 --- a/core/pom.xml +++ b/branch-core/pom.xml @@ -37,6 +37,15 @@ ${compiler.version} + + + org.slf4j + slf4j-api + 1.7.32 + test + + + diff --git a/core/src/main/java/me/aurium/branch/centralized/CentralizedManager.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/CentralizedManager.java similarity index 66% rename from core/src/main/java/me/aurium/branch/centralized/CentralizedManager.java rename to branch-core/src/main/java/xyz/auriium/branch/centralized/CentralizedManager.java index cac406a..3fee33f 100644 --- a/core/src/main/java/me/aurium/branch/centralized/CentralizedManager.java +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/CentralizedManager.java @@ -19,11 +19,12 @@ * */ -package me.aurium.branch.centralized; +package xyz.auriium.branch.centralized; -import me.aurium.branch.centralized.base.NodeBase; -import me.aurium.branch.centralized.base.NodeBaseBuilder; -import me.aurium.branch.centralized.typeadapter.ManagerAdapter; +import xyz.auriium.branch.centralized.base.NodeBase; +import xyz.auriium.branch.centralized.base.NodeBaseBuilder; +import xyz.auriium.branch.centralized.typeadapter.ManagerAdapter; +import xyz.auriium.branch.nodes.CommandNode; /** * Represents the utmost base part of the command framework which has the ability to bind any injected commands to a platform @@ -35,10 +36,13 @@ public interface CentralizedManager { CentralizedManagerBinder getBinder(V platform); NodeSource getSource(); - NodeBaseBuilder newCommand(); - NodeBaseBuilder newCommand(ManagerAdapter adapter); + NodeBaseBuilder newCommandWithBuilder(); + NodeBaseBuilder newCommandWithBuilder(ManagerAdapter adapter); - void injectCommand(NodeBase base); + void newCommandWithNode(CommandNode node); + void newCommandWithNode(CommandNode node, ManagerAdapter adapter); + + void newCommand(NodeBase base); } diff --git a/core/src/main/java/me/aurium/branch/centralized/CentralizedManagerBinder.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/CentralizedManagerBinder.java similarity index 96% rename from core/src/main/java/me/aurium/branch/centralized/CentralizedManagerBinder.java rename to branch-core/src/main/java/xyz/auriium/branch/centralized/CentralizedManagerBinder.java index 2c16ed7..fd42a49 100644 --- a/core/src/main/java/me/aurium/branch/centralized/CentralizedManagerBinder.java +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/CentralizedManagerBinder.java @@ -19,7 +19,7 @@ * */ -package me.aurium.branch.centralized; +package xyz.auriium.branch.centralized; /** * Represents a carrier vessel which is typically attached to the instance of a centralizedManagerBinder's platform diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/NodeSource.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/NodeSource.java new file mode 100644 index 0000000..3cc6c81 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/NodeSource.java @@ -0,0 +1,22 @@ +package xyz.auriium.branch.centralized; + +import xyz.auriium.branch.execution.api.ExecutionHandler; +import xyz.auriium.branch.fallback.permissions.Permission; +import xyz.auriium.branch.interfacing.information.description.Description; +import xyz.auriium.branch.nodes.branching.ExclusiveBranchingBuilder; +import xyz.auriium.branch.nodes.branching.InclusiveBranchingBuilder; +import xyz.auriium.branch.nodes.single.SingleNode; +import xyz.auriium.branch.nodes.single.SingleNodeBuilder; + +public interface NodeSource { + + SingleNodeBuilder single(); + InclusiveBranchingBuilder inclusiveBranching(); + ExclusiveBranchingBuilder exclusiveBranching(); + //TODO help and argument + + + SingleNode singleNode(String literal, ExecutionHandler handler); + SingleNode singleNode(String literal, ExecutionHandler handler, Permission permission, Description description); + +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/base/AbstractNodeBase.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/base/AbstractNodeBase.java new file mode 100644 index 0000000..fc31ca2 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/base/AbstractNodeBase.java @@ -0,0 +1,102 @@ +/* + * + * Branch + * Copyright © 2021 Aurium + * + * Branch is free software: you can redistribute it and/or modify + * It under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * Branch is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Branch. If not, see + * and navigate to version 3 of the GNU Affero General Public License. + * + */ + +package xyz.auriium.branch.centralized.base; + +import xyz.auriium.branch.centralized.typeadapter.ManagerAdapter; +import xyz.auriium.branch.execution.api.Execution; +import xyz.auriium.branch.execution.ContextProvider; +import xyz.auriium.branch.execution.NodeContext; +import xyz.auriium.branch.fallback.strategies.FallbackSearchStrategy; +import xyz.auriium.branch.interfacing.handlers.InterfacingHandler; +import xyz.auriium.branch.nodes.CommandNode; +import xyz.auriium.branch.nodes.results.SearchInfo; +import xyz.auriium.branch.nodes.results.model.Result; + +import java.util.List; + +/** + * Represents a node base that has the ability to convert it's input sender to a sender of type C or fail with a result. + * @param the input type of nodebase + * @param the adjusted type desired by the output of the {@link ManagerAdapter} found in this nodebase + */ +public abstract class AbstractNodeBase implements NodeBase { + + private final ManagerAdapter adapter; + + private final CommandNode baseNode; + private final FallbackSearchStrategy strategy; + private final ContextProvider provider; + private final InterfacingHandler handler; + + public AbstractNodeBase(ManagerAdapter adapter, CommandNode baseNode, FallbackSearchStrategy strategy, ContextProvider provider, InterfacingHandler handler) { + this.adapter = adapter; + this.baseNode = baseNode; + this.strategy = strategy; + this.provider = provider; + this.handler = handler; + } + + /** + * Method for execution of runnable once runnable is found + * Exists in order to allow for concurrent-type nodebases + * + * @param execution the runnable + */ + abstract void submitExecution(Execution execution); + + public void execute(I input, String alias, String[] args) { + //have not aqcuired C-type (cannot use Result object or message handling-parsing) + + if (!adapter.canAdapt(input)) { + handler.sendMessage(input,adapter.failedParseResponse(input)); //invalid access of handler with new c-type/t-type ruleset + //to remedy we must implement a base-type handler in all handlers. + return; + } + + //have acquired C-type via parsing. + + A adaptedSender = adapter.adapt(input); + + Result> result = strategy.attemptPreprocess(adaptedSender,alias,args,baseNode); + + if (!result.isSuccessful()) { + handler.sendMessage(input, result.getFailure()); + return; + } + + SearchInfo info = result.getSuccess(); + NodeContext produced = provider.produce(adaptedSender,alias,args,baseNode,info); + + Result> executionResult = info.resultingNode().getExecution(produced); + + if (!executionResult.isSuccessful()) { + handler.sendMessage(input, result.getFailure()); + } + + submitExecution(executionResult.getSuccess()); + } + + public List suggest(I input, String alias, String[] args) { + return null; //TODO + } + +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/base/DelegatingNodeBase.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/base/DelegatingNodeBase.java new file mode 100644 index 0000000..bcf827e --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/base/DelegatingNodeBase.java @@ -0,0 +1,32 @@ +package xyz.auriium.branch.centralized.base; + +import xyz.auriium.branch.centralized.typeadapter.ManagerAdapter; +import xyz.auriium.branch.execution.ContextProvider; +import xyz.auriium.branch.fallback.strategies.FallbackSearchStrategy; +import xyz.auriium.branch.interfacing.information.description.Description; +import xyz.auriium.branch.interfacing.handlers.InterfacingHandler; +import xyz.auriium.branch.nodes.IdentifiableNode; + +/** + * Adapting node base that delegates identifier calls to the first node in the base stack. + */ +public class DelegatingNodeBase extends RunNodeBase { + + private final IdentifiableNode baseNode; + + public DelegatingNodeBase(ManagerAdapter adapter, IdentifiableNode baseNode, FallbackSearchStrategy strategy, ContextProvider provider, InterfacingHandler handler) { + super(adapter, baseNode, strategy, provider, handler); + + this.baseNode = baseNode; + } + + @Override + public Description getDescription() { + return baseNode.getDescription(); + } + + @Override + public String getIdentifier() { + return baseNode.getIdentifier().getIdentifier(); + } +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/base/NodeBase.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/base/NodeBase.java new file mode 100644 index 0000000..f8acd04 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/base/NodeBase.java @@ -0,0 +1,61 @@ +/* + * + * Branch + * Copyright © 2021 Aurium + * + * Branch is free software: you can redistribute it and/or modify + * It under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * Branch is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Branch. If not, see + * and navigate to version 3 of the GNU Affero General Public License. + * + */ + +package xyz.auriium.branch.centralized.base; + +import xyz.auriium.branch.interfacing.information.description.Description; + +import java.util.Collections; +import java.util.List; + +/** + * Represents a single command tree as a single executable object, executable by the bound node base. + * You can **technically** simply implement this and pretend it's a normal bukkit command + * I will laugh at you, however. + * + * @param type of input object used by the manager this node base is bound to + */ +public interface NodeBase { + + /** + * Method called when node base desires execution of this object + * @param input input object of the manager (maybe not final adapted object) + * @param alias alias of the command (people like using this in interfacing) + * @param args arguments sent by input object + */ + void execute(I input, String alias, String[] args); + + /** + * Method called when node base desires suggestions to submit to the user + * @param input input object of the manager (maybe not final adapted object) + * @param alias alias of the command (people like using this in interfacing) + * @param args arguments sent by input object + */ + List suggest(I input, String alias, String[] args); + + Description getDescription(); + String getIdentifier(); + + default List getAliases() { + return Collections.emptyList(); + } + +} diff --git a/core/src/main/java/me/aurium/branch/centralized/base/NodeBaseBuilder.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/base/NodeBaseBuilder.java similarity index 67% rename from core/src/main/java/me/aurium/branch/centralized/base/NodeBaseBuilder.java rename to branch-core/src/main/java/xyz/auriium/branch/centralized/base/NodeBaseBuilder.java index 42154c0..df04198 100644 --- a/core/src/main/java/me/aurium/branch/centralized/base/NodeBaseBuilder.java +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/base/NodeBaseBuilder.java @@ -19,17 +19,16 @@ * */ -package me.aurium.branch.centralized.base; +package xyz.auriium.branch.centralized.base; -import me.aurium.branch.centralized.CentralizedManager; -import me.aurium.branch.centralized.typeadapter.ManagerAdapter; -import me.aurium.branch.execution.ContextProvider; -import me.aurium.branch.fallback.strategies.FallbackSearchStrategy; -import me.aurium.branch.interfacing.handlers.InterfacingHandler; -import me.aurium.branch.nodes.CommandNode; -import me.aurium.branch.nodes.IdentifiableNode; +import xyz.auriium.branch.centralized.CentralizedManager; +import xyz.auriium.branch.centralized.typeadapter.ManagerAdapter; +import xyz.auriium.branch.execution.ContextProvider; +import xyz.auriium.branch.fallback.strategies.FallbackSearchStrategy; +import xyz.auriium.branch.interfacing.handlers.InterfacingHandler; +import xyz.auriium.branch.nodes.IdentifiableNode; -import java.util.Objects; +import java.util.*; /** * Default implementation of a class that produces adaptingNodeBases @@ -47,6 +46,7 @@ public class NodeBaseBuilder { private ContextProvider provider; private InterfacingHandler handler; + private final List aliases = new ArrayList<>(); public NodeBaseBuilder(CentralizedManager manager, ManagerAdapter adapter) { this.manager = manager; @@ -61,36 +61,42 @@ public NodeBaseBuilder(CentralizedManager manager, ManagerAdapter ad this.handler = handler; } - public NodeBaseBuilder setNode(IdentifiableNode node) { + public NodeBaseBuilder withNode(IdentifiableNode node) { this.node = node; return this; } - public NodeBaseBuilder setStrategy(FallbackSearchStrategy strategy) { + public NodeBaseBuilder withAliases(String... aliases) { + this.aliases.addAll(Arrays.asList(aliases)); + + return this; + } + + public NodeBaseBuilder customStrategy(FallbackSearchStrategy strategy) { this.strategy = strategy; return this; } - public NodeBaseBuilder setProvider(ContextProvider provider) { + public NodeBaseBuilder customProvider(ContextProvider provider) { this.provider = provider; return this; } - public NodeBaseBuilder setHandler(InterfacingHandler handler) { + public NodeBaseBuilder customInterfacing(InterfacingHandler handler) { this.handler = handler; return this; } - public void inject() { + public void finish() { Objects.requireNonNull(node); Objects.requireNonNull(strategy); Objects.requireNonNull(provider); Objects.requireNonNull(handler); - manager.injectCommand(new DelegatingNodeBase<>(adapter,node,strategy,provider,handler)); + manager.newCommand(new DelegatingNodeBase<>(adapter,node,strategy,provider,handler)); } } diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/base/RunNodeBase.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/base/RunNodeBase.java new file mode 100644 index 0000000..f6019ad --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/base/RunNodeBase.java @@ -0,0 +1,25 @@ +package xyz.auriium.branch.centralized.base; + +import xyz.auriium.branch.centralized.typeadapter.ManagerAdapter; +import xyz.auriium.branch.execution.ContextProvider; +import xyz.auriium.branch.execution.api.Execution; +import xyz.auriium.branch.fallback.strategies.FallbackSearchStrategy; +import xyz.auriium.branch.interfacing.handlers.InterfacingHandler; +import xyz.auriium.branch.nodes.CommandNode; + +/** + * Nodebase that simply runs the execution runnable + * @param input type + * @param adapted type + */ +public abstract class RunNodeBase extends AbstractNodeBase { + + public RunNodeBase(ManagerAdapter adapter, CommandNode baseNode, FallbackSearchStrategy strategy, ContextProvider provider, InterfacingHandler handler) { + super(adapter, baseNode, strategy, provider, handler); + } + + @Override + void submitExecution(Execution execution) { + execution.run(); + } +} diff --git a/core/src/main/java/me/aurium/branch/centralized/typeadapter/CommonAdapter.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/CommonAdapter.java similarity index 91% rename from core/src/main/java/me/aurium/branch/centralized/typeadapter/CommonAdapter.java rename to branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/CommonAdapter.java index fb18fcd..13da0fd 100644 --- a/core/src/main/java/me/aurium/branch/centralized/typeadapter/CommonAdapter.java +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/CommonAdapter.java @@ -19,9 +19,9 @@ * */ -package me.aurium.branch.centralized.typeadapter; +package xyz.auriium.branch.centralized.typeadapter; -import me.aurium.branch.interfacing.responses.FailedAdaptingResponse; +import xyz.auriium.branch.interfacing.responses.FailedAdaptingResponse; /** * Represents an adapter that does not convert and simply returns the same object diff --git a/core/src/main/java/me/aurium/branch/centralized/typeadapter/ManagerAdapter.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/ManagerAdapter.java similarity index 91% rename from core/src/main/java/me/aurium/branch/centralized/typeadapter/ManagerAdapter.java rename to branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/ManagerAdapter.java index 56e51f9..bfda60a 100644 --- a/core/src/main/java/me/aurium/branch/centralized/typeadapter/ManagerAdapter.java +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/ManagerAdapter.java @@ -19,9 +19,9 @@ * */ -package me.aurium.branch.centralized.typeadapter; +package xyz.auriium.branch.centralized.typeadapter; -import me.aurium.branch.interfacing.responses.FailedAdaptingResponse; +import xyz.auriium.branch.interfacing.responses.FailedAdaptingResponse; /** * Represents something that can convert an object of a certain type to another object diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/ReduxAdapter.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/ReduxAdapter.java new file mode 100644 index 0000000..41dfe6a --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/ReduxAdapter.java @@ -0,0 +1,16 @@ +package xyz.auriium.branch.centralized.typeadapter; + +import xyz.auriium.branch.nodes.results.model.Result; + +/** + * New version of adapter in accordance with new design + * @param input type + * @param output type + * + * TODO: rename to SenderParser + */ +public interface ReduxAdapter { + + Result parse(I input); + +} diff --git a/core/src/main/java/me/aurium/branch/centralized/typeadapter/StandardCommonAdapter.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/StandardCommonAdapter.java similarity index 94% rename from core/src/main/java/me/aurium/branch/centralized/typeadapter/StandardCommonAdapter.java rename to branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/StandardCommonAdapter.java index bee22dd..1f0f594 100644 --- a/core/src/main/java/me/aurium/branch/centralized/typeadapter/StandardCommonAdapter.java +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/StandardCommonAdapter.java @@ -19,7 +19,7 @@ * */ -package me.aurium.branch.centralized.typeadapter; +package xyz.auriium.branch.centralized.typeadapter; /** * Simple implementation"" diff --git a/core/src/main/java/me/aurium/branch/execution/AbstractNodeContext.java b/branch-core/src/main/java/xyz/auriium/branch/execution/AbstractNodeContext.java similarity index 93% rename from core/src/main/java/me/aurium/branch/execution/AbstractNodeContext.java rename to branch-core/src/main/java/xyz/auriium/branch/execution/AbstractNodeContext.java index 71bc2a6..552ab30 100644 --- a/core/src/main/java/me/aurium/branch/execution/AbstractNodeContext.java +++ b/branch-core/src/main/java/xyz/auriium/branch/execution/AbstractNodeContext.java @@ -19,11 +19,11 @@ * */ -package me.aurium.branch.execution; +package xyz.auriium.branch.execution; -import me.aurium.branch.nodes.CommandNode; -import me.aurium.branch.nodes.results.SearchInfo; +import xyz.auriium.branch.nodes.CommandNode; +import xyz.auriium.branch.nodes.results.SearchInfo; /** * Abstract implementation of a node context diff --git a/core/src/main/java/me/aurium/branch/execution/Block.java b/branch-core/src/main/java/xyz/auriium/branch/execution/Block.java similarity index 96% rename from core/src/main/java/me/aurium/branch/execution/Block.java rename to branch-core/src/main/java/xyz/auriium/branch/execution/Block.java index b8048c1..0ccc4e5 100644 --- a/core/src/main/java/me/aurium/branch/execution/Block.java +++ b/branch-core/src/main/java/xyz/auriium/branch/execution/Block.java @@ -19,7 +19,7 @@ * */ -package me.aurium.branch.execution; +package xyz.auriium.branch.execution; /** * Represents an unparsed component of a command argument input structure diff --git a/core/src/main/java/me/aurium/branch/execution/ContextProvider.java b/branch-core/src/main/java/xyz/auriium/branch/execution/ContextProvider.java similarity index 88% rename from core/src/main/java/me/aurium/branch/execution/ContextProvider.java rename to branch-core/src/main/java/xyz/auriium/branch/execution/ContextProvider.java index 4c6056d..c542196 100644 --- a/core/src/main/java/me/aurium/branch/execution/ContextProvider.java +++ b/branch-core/src/main/java/xyz/auriium/branch/execution/ContextProvider.java @@ -19,10 +19,10 @@ * */ -package me.aurium.branch.execution; +package xyz.auriium.branch.execution; -import me.aurium.branch.nodes.CommandNode; -import me.aurium.branch.nodes.results.SearchInfo; +import xyz.auriium.branch.nodes.CommandNode; +import xyz.auriium.branch.nodes.results.SearchInfo; /** * Represents something that produces specific context based on a platform diff --git a/core/src/main/java/me/aurium/branch/execution/EmptyExecutionHandler.java b/branch-core/src/main/java/xyz/auriium/branch/execution/EmptyExecutionHandler.java similarity index 90% rename from core/src/main/java/me/aurium/branch/execution/EmptyExecutionHandler.java rename to branch-core/src/main/java/xyz/auriium/branch/execution/EmptyExecutionHandler.java index 3ba74c8..b1b7f12 100644 --- a/core/src/main/java/me/aurium/branch/execution/EmptyExecutionHandler.java +++ b/branch-core/src/main/java/xyz/auriium/branch/execution/EmptyExecutionHandler.java @@ -19,9 +19,9 @@ * */ -package me.aurium.branch.execution; +package xyz.auriium.branch.execution; -import me.aurium.branch.execution.api.ExecutionHandler; +import xyz.auriium.branch.execution.api.ExecutionHandler; public class EmptyExecutionHandler implements ExecutionHandler { @Override diff --git a/core/src/main/java/me/aurium/branch/execution/EmptySuggestionHandler.java b/branch-core/src/main/java/xyz/auriium/branch/execution/EmptySuggestionHandler.java similarity index 91% rename from core/src/main/java/me/aurium/branch/execution/EmptySuggestionHandler.java rename to branch-core/src/main/java/xyz/auriium/branch/execution/EmptySuggestionHandler.java index f819a89..27dc2af 100644 --- a/core/src/main/java/me/aurium/branch/execution/EmptySuggestionHandler.java +++ b/branch-core/src/main/java/xyz/auriium/branch/execution/EmptySuggestionHandler.java @@ -19,9 +19,9 @@ * */ -package me.aurium.branch.execution; +package xyz.auriium.branch.execution; -import me.aurium.branch.execution.api.SuggestionHandler; +import xyz.auriium.branch.execution.api.SuggestionHandler; import java.util.ArrayList; import java.util.List; diff --git a/core/src/main/java/me/aurium/branch/execution/NodeContext.java b/branch-core/src/main/java/xyz/auriium/branch/execution/NodeContext.java similarity index 70% rename from core/src/main/java/me/aurium/branch/execution/NodeContext.java rename to branch-core/src/main/java/xyz/auriium/branch/execution/NodeContext.java index 467e7df..6836bf6 100644 --- a/core/src/main/java/me/aurium/branch/execution/NodeContext.java +++ b/branch-core/src/main/java/xyz/auriium/branch/execution/NodeContext.java @@ -19,11 +19,11 @@ * */ -package me.aurium.branch.execution; +package xyz.auriium.branch.execution; -import me.aurium.branch.interfacing.Response; -import me.aurium.branch.nodes.CommandNode; -import me.aurium.branch.nodes.results.SearchInfo; +import xyz.auriium.branch.interfacing.Response; +import xyz.auriium.branch.nodes.CommandNode; +import xyz.auriium.branch.nodes.results.SearchInfo; /** @@ -33,7 +33,16 @@ */ public interface NodeContext { + /** + * Gets the parsed sender object used by this object + * @return + */ T getSender(); + + /** + * Returns the specific name used to execute this command + * @return alias string + */ String getAlias(); String[] getArgs(); CommandNode getBaseExecutedNode(); @@ -51,5 +60,12 @@ public interface NodeContext { */ void response(Response failure); + /** + * Gets whether the context's delegating sender has access to a permission. On some platforms, this may always be false. + * @param string the permission + * @return whether it is permissible or not. + */ + boolean hasStringPermissible(String string); + } diff --git a/core/src/main/java/me/aurium/branch/execution/StringBlock.java b/branch-core/src/main/java/xyz/auriium/branch/execution/StringBlock.java similarity index 97% rename from core/src/main/java/me/aurium/branch/execution/StringBlock.java rename to branch-core/src/main/java/xyz/auriium/branch/execution/StringBlock.java index 6bcb746..88da243 100644 --- a/core/src/main/java/me/aurium/branch/execution/StringBlock.java +++ b/branch-core/src/main/java/xyz/auriium/branch/execution/StringBlock.java @@ -19,7 +19,7 @@ * */ -package me.aurium.branch.execution; +package xyz.auriium.branch.execution; /** * Represents a block that contains a string diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/api/ArgExecution.java b/branch-core/src/main/java/xyz/auriium/branch/execution/api/ArgExecution.java new file mode 100644 index 0000000..593fcaf --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/execution/api/ArgExecution.java @@ -0,0 +1,26 @@ +package xyz.auriium.branch.execution.api; + +import xyz.auriium.branch.execution.NodeContext; +import xyz.auriium.branch.nodes.argument.ArgumentContext; +import xyz.auriium.branch.nodes.argument.ArgumentContextHandler; +import xyz.auriium.branch.nodes.argument.Arguments; + +public class ArgExecution implements Execution { + + private final ArgumentContextHandler handler; + private final NodeContext node; + private final Arguments arguments; + + public ArgExecution(ArgumentContextHandler handler, NodeContext node, Arguments arguments) { + this.handler = handler; + this.node = node; + this.arguments = arguments; + } + + + @Override + public void run() { + handler.handle(new ArgumentContext<>(node, arguments)); + } + +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/api/BasicExecution.java b/branch-core/src/main/java/xyz/auriium/branch/execution/api/BasicExecution.java new file mode 100644 index 0000000..be961a1 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/execution/api/BasicExecution.java @@ -0,0 +1,20 @@ +package xyz.auriium.branch.execution.api; + +import xyz.auriium.branch.execution.NodeContext; + +public class BasicExecution implements Execution { + + private final ExecutionHandler handler; + private final NodeContext node; + + public BasicExecution(ExecutionHandler handler, NodeContext node) { + this.handler = handler; + this.node = node; + } + + @Override + public void run() { + handler.handle(node); + } + +} diff --git a/core/src/main/java/me/aurium/branch/nodes/argument/ArgumentContext.java b/branch-core/src/main/java/xyz/auriium/branch/execution/api/Execution.java similarity index 69% rename from core/src/main/java/me/aurium/branch/nodes/argument/ArgumentContext.java rename to branch-core/src/main/java/xyz/auriium/branch/execution/api/Execution.java index a44e3db..93b30f2 100644 --- a/core/src/main/java/me/aurium/branch/nodes/argument/ArgumentContext.java +++ b/branch-core/src/main/java/xyz/auriium/branch/execution/api/Execution.java @@ -19,12 +19,16 @@ * */ -package me.aurium.branch.nodes.argument; +package xyz.auriium.branch.execution.api; -import me.aurium.branch.execution.NodeContext; +import xyz.auriium.branch.execution.NodeContext; -public interface ArgumentContext extends NodeContext { +/** + * Marker runnable representing the supplying of all required dependencies to an execution handler + * or significant derivative and actual execution of said handler. + * + * @param the type + */ +public interface Execution extends Runnable { - Arguments getArgumentContainer(); - } diff --git a/core/src/main/java/me/aurium/branch/execution/api/ExecutionHandler.java b/branch-core/src/main/java/xyz/auriium/branch/execution/api/ExecutionHandler.java similarity index 91% rename from core/src/main/java/me/aurium/branch/execution/api/ExecutionHandler.java rename to branch-core/src/main/java/xyz/auriium/branch/execution/api/ExecutionHandler.java index e4e2a1c..480ed8d 100644 --- a/core/src/main/java/me/aurium/branch/execution/api/ExecutionHandler.java +++ b/branch-core/src/main/java/xyz/auriium/branch/execution/api/ExecutionHandler.java @@ -19,9 +19,9 @@ * */ -package me.aurium.branch.execution.api; +package xyz.auriium.branch.execution.api; -import me.aurium.branch.execution.NodeContext; +import xyz.auriium.branch.execution.NodeContext; /** * Functional interface typically used in simple nodes that only need to do one action diff --git a/core/src/main/java/me/aurium/branch/execution/api/SuggestionHandler.java b/branch-core/src/main/java/xyz/auriium/branch/execution/api/SuggestionHandler.java similarity index 88% rename from core/src/main/java/me/aurium/branch/execution/api/SuggestionHandler.java rename to branch-core/src/main/java/xyz/auriium/branch/execution/api/SuggestionHandler.java index cac21fc..ba53429 100644 --- a/core/src/main/java/me/aurium/branch/execution/api/SuggestionHandler.java +++ b/branch-core/src/main/java/xyz/auriium/branch/execution/api/SuggestionHandler.java @@ -19,10 +19,10 @@ * */ -package me.aurium.branch.execution.api; +package xyz.auriium.branch.execution.api; -import me.aurium.branch.execution.Block; -import me.aurium.branch.execution.NodeContext; +import xyz.auriium.branch.execution.Block; +import xyz.auriium.branch.execution.NodeContext; import java.util.List; diff --git a/core/src/main/java/me/aurium/branch/fallback/permissions/EmptyPermission.java b/branch-core/src/main/java/xyz/auriium/branch/fallback/permissions/EmptyPermission.java similarity index 95% rename from core/src/main/java/me/aurium/branch/fallback/permissions/EmptyPermission.java rename to branch-core/src/main/java/xyz/auriium/branch/fallback/permissions/EmptyPermission.java index 01c9677..baab6ea 100644 --- a/core/src/main/java/me/aurium/branch/fallback/permissions/EmptyPermission.java +++ b/branch-core/src/main/java/xyz/auriium/branch/fallback/permissions/EmptyPermission.java @@ -19,7 +19,7 @@ * */ -package me.aurium.branch.fallback.permissions; +package xyz.auriium.branch.fallback.permissions; /** * Represents a permission that is always true diff --git a/core/src/main/java/me/aurium/branch/fallback/permissions/Permission.java b/branch-core/src/main/java/xyz/auriium/branch/fallback/permissions/Permission.java similarity index 93% rename from core/src/main/java/me/aurium/branch/fallback/permissions/Permission.java rename to branch-core/src/main/java/xyz/auriium/branch/fallback/permissions/Permission.java index ab13801..2f6936c 100644 --- a/core/src/main/java/me/aurium/branch/fallback/permissions/Permission.java +++ b/branch-core/src/main/java/xyz/auriium/branch/fallback/permissions/Permission.java @@ -19,9 +19,9 @@ * */ -package me.aurium.branch.fallback.permissions; +package xyz.auriium.branch.fallback.permissions; -import me.aurium.branch.execution.NodeContext; +import xyz.auriium.branch.execution.NodeContext; /** * Represents the accessibility predicate of a command -> whether a command can be executed or not diff --git a/core/src/main/java/me/aurium/branch/fallback/permissions/PredicatePermission.java b/branch-core/src/main/java/xyz/auriium/branch/fallback/permissions/PredicatePermission.java similarity index 96% rename from core/src/main/java/me/aurium/branch/fallback/permissions/PredicatePermission.java rename to branch-core/src/main/java/xyz/auriium/branch/fallback/permissions/PredicatePermission.java index 53c55b3..448ed5b 100644 --- a/core/src/main/java/me/aurium/branch/fallback/permissions/PredicatePermission.java +++ b/branch-core/src/main/java/xyz/auriium/branch/fallback/permissions/PredicatePermission.java @@ -19,7 +19,7 @@ * */ -package me.aurium.branch.fallback.permissions; +package xyz.auriium.branch.fallback.permissions; import java.util.function.Predicate; diff --git a/branch-core/src/main/java/xyz/auriium/branch/fallback/permissions/StringPermission.java b/branch-core/src/main/java/xyz/auriium/branch/fallback/permissions/StringPermission.java new file mode 100644 index 0000000..22936da --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/fallback/permissions/StringPermission.java @@ -0,0 +1,20 @@ +package xyz.auriium.branch.fallback.permissions; + +public class StringPermission implements Permission { + + private final String permissionNode; + + public StringPermission(String permissionNode) { + this.permissionNode = permissionNode; + } + + @Override + public boolean attempt(T sender, String alias, String[] args) { + return false; + } + + @Override + public String failureIdentifiableName() { + return null; + } +} diff --git a/core/src/main/java/me/aurium/branch/fallback/strategies/FallbackSearchStrategy.java b/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/FallbackSearchStrategy.java similarity index 85% rename from core/src/main/java/me/aurium/branch/fallback/strategies/FallbackSearchStrategy.java rename to branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/FallbackSearchStrategy.java index 53898d0..a75bf6c 100644 --- a/core/src/main/java/me/aurium/branch/fallback/strategies/FallbackSearchStrategy.java +++ b/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/FallbackSearchStrategy.java @@ -19,11 +19,11 @@ * */ -package me.aurium.branch.fallback.strategies; +package xyz.auriium.branch.fallback.strategies; -import me.aurium.branch.nodes.CommandNode; -import me.aurium.branch.nodes.results.SearchInfo; -import me.aurium.branch.nodes.results.model.Result; +import xyz.auriium.branch.nodes.CommandNode; +import xyz.auriium.branch.nodes.results.SearchInfo; +import xyz.auriium.branch.nodes.results.model.Result; /** * A strategy to define diff --git a/core/src/main/java/me/aurium/branch/fallback/strategies/OneBackStrategy.java b/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/OneBackStrategy.java similarity index 92% rename from core/src/main/java/me/aurium/branch/fallback/strategies/OneBackStrategy.java rename to branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/OneBackStrategy.java index 9f0e971..48bbf27 100644 --- a/core/src/main/java/me/aurium/branch/fallback/strategies/OneBackStrategy.java +++ b/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/OneBackStrategy.java @@ -19,13 +19,13 @@ * */ -package me.aurium.branch.fallback.strategies; +package xyz.auriium.branch.fallback.strategies; -import me.aurium.branch.interfacing.responses.NoPermissionResponse; -import me.aurium.branch.nodes.CommandNode; -import me.aurium.branch.nodes.results.SearchInput; -import me.aurium.branch.nodes.results.SearchInfo; -import me.aurium.branch.nodes.results.model.Result; +import xyz.auriium.branch.interfacing.responses.NoPermissionResponse; +import xyz.auriium.branch.nodes.CommandNode; +import xyz.auriium.branch.nodes.results.SearchInput; +import xyz.auriium.branch.nodes.results.SearchInfo; +import xyz.auriium.branch.nodes.results.model.Result; /** * diff --git a/core/src/main/java/me/aurium/branch/fallback/strategies/PermissionLockoutStrategy.java b/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/PermissionLockoutStrategy.java similarity index 83% rename from core/src/main/java/me/aurium/branch/fallback/strategies/PermissionLockoutStrategy.java rename to branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/PermissionLockoutStrategy.java index 0b67c80..9e4740f 100644 --- a/core/src/main/java/me/aurium/branch/fallback/strategies/PermissionLockoutStrategy.java +++ b/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/PermissionLockoutStrategy.java @@ -19,13 +19,13 @@ * */ -package me.aurium.branch.fallback.strategies; +package xyz.auriium.branch.fallback.strategies; -import me.aurium.branch.interfacing.responses.NoPermissionResponse; -import me.aurium.branch.nodes.CommandNode; -import me.aurium.branch.nodes.results.SearchInfo; -import me.aurium.branch.nodes.results.SearchInput; -import me.aurium.branch.nodes.results.model.Result; +import xyz.auriium.branch.interfacing.responses.NoPermissionResponse; +import xyz.auriium.branch.nodes.CommandNode; +import xyz.auriium.branch.nodes.results.SearchInfo; +import xyz.auriium.branch.nodes.results.SearchInput; +import xyz.auriium.branch.nodes.results.model.Result; /** * Simple fallback strategy that if the sender has no permission to execute the command they are sent a failing response. diff --git a/core/src/main/java/me/aurium/branch/interfacing/Message.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/Message.java similarity index 96% rename from core/src/main/java/me/aurium/branch/interfacing/Message.java rename to branch-core/src/main/java/xyz/auriium/branch/interfacing/Message.java index 11653ca..18905a8 100644 --- a/core/src/main/java/me/aurium/branch/interfacing/Message.java +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/Message.java @@ -19,7 +19,7 @@ * */ -package me.aurium.branch.interfacing; +package xyz.auriium.branch.interfacing; /** * Represents the final stage of something that occur after a response has been consumed diff --git a/core/src/main/java/me/aurium/branch/interfacing/Response.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/Response.java similarity index 95% rename from core/src/main/java/me/aurium/branch/interfacing/Response.java rename to branch-core/src/main/java/xyz/auriium/branch/interfacing/Response.java index ad1b88a..a6571c8 100644 --- a/core/src/main/java/me/aurium/branch/interfacing/Response.java +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/Response.java @@ -19,7 +19,7 @@ * */ -package me.aurium.branch.interfacing; +package xyz.auriium.branch.interfacing; /** * Marker interface for a data-carrying object that can be consumed by a responseActionhandler diff --git a/core/src/main/java/me/aurium/branch/interfacing/ResponseAction.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/ResponseAction.java similarity index 96% rename from core/src/main/java/me/aurium/branch/interfacing/ResponseAction.java rename to branch-core/src/main/java/xyz/auriium/branch/interfacing/ResponseAction.java index b6a0e8a..99e576d 100644 --- a/core/src/main/java/me/aurium/branch/interfacing/ResponseAction.java +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/ResponseAction.java @@ -19,7 +19,7 @@ * */ -package me.aurium.branch.interfacing; +package xyz.auriium.branch.interfacing; /** * Represents an action that is fired when a response is received diff --git a/core/src/main/java/me/aurium/branch/interfacing/handlers/CommonInterfacingHandler.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/CommonInterfacingHandler.java similarity index 90% rename from core/src/main/java/me/aurium/branch/interfacing/handlers/CommonInterfacingHandler.java rename to branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/CommonInterfacingHandler.java index f7cfc0c..2f16fb8 100644 --- a/core/src/main/java/me/aurium/branch/interfacing/handlers/CommonInterfacingHandler.java +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/CommonInterfacingHandler.java @@ -19,11 +19,11 @@ * */ -package me.aurium.branch.interfacing.handlers; +package xyz.auriium.branch.interfacing.handlers; -import me.aurium.branch.interfacing.Message; -import me.aurium.branch.interfacing.Response; -import me.aurium.branch.interfacing.ResponseAction; +import xyz.auriium.branch.interfacing.Message; +import xyz.auriium.branch.interfacing.Response; +import xyz.auriium.branch.interfacing.ResponseAction; import java.util.Map; diff --git a/core/src/main/java/me/aurium/branch/interfacing/handlers/DelegatingDefaultMap.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/DelegatingDefaultMap.java similarity index 89% rename from core/src/main/java/me/aurium/branch/interfacing/handlers/DelegatingDefaultMap.java rename to branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/DelegatingDefaultMap.java index 6316231..8650e5e 100644 --- a/core/src/main/java/me/aurium/branch/interfacing/handlers/DelegatingDefaultMap.java +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/DelegatingDefaultMap.java @@ -19,10 +19,10 @@ * */ -package me.aurium.branch.interfacing.handlers; +package xyz.auriium.branch.interfacing.handlers; -import me.aurium.branch.interfacing.Response; -import me.aurium.branch.interfacing.ResponseAction; +import xyz.auriium.branch.interfacing.Response; +import xyz.auriium.branch.interfacing.ResponseAction; public abstract class DelegatingDefaultMap implements MessageMap { diff --git a/core/src/main/java/me/aurium/branch/interfacing/handlers/InnerMap.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/InnerMap.java similarity index 89% rename from core/src/main/java/me/aurium/branch/interfacing/handlers/InnerMap.java rename to branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/InnerMap.java index bd0e569..75a17ba 100644 --- a/core/src/main/java/me/aurium/branch/interfacing/handlers/InnerMap.java +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/InnerMap.java @@ -19,10 +19,10 @@ * */ -package me.aurium.branch.interfacing.handlers; +package xyz.auriium.branch.interfacing.handlers; -import me.aurium.branch.interfacing.Response; -import me.aurium.branch.interfacing.ResponseAction; +import xyz.auriium.branch.interfacing.Response; +import xyz.auriium.branch.interfacing.ResponseAction; import java.util.HashMap; import java.util.Map; diff --git a/core/src/main/java/me/aurium/branch/interfacing/handlers/InterfacingHandler.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/InterfacingHandler.java similarity index 83% rename from core/src/main/java/me/aurium/branch/interfacing/handlers/InterfacingHandler.java rename to branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/InterfacingHandler.java index b65c93f..189ac3f 100644 --- a/core/src/main/java/me/aurium/branch/interfacing/handlers/InterfacingHandler.java +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/InterfacingHandler.java @@ -19,14 +19,16 @@ * */ -package me.aurium.branch.interfacing.handlers; +package xyz.auriium.branch.interfacing.handlers; -import me.aurium.branch.interfacing.Message; -import me.aurium.branch.interfacing.Response; +import xyz.auriium.branch.interfacing.Message; +import xyz.auriium.branch.interfacing.Response; /** * Represents a centralized source for message providing as well as context creation. I am aware i spelled recipient wrong. * @param the type + * + * TODO InterfacingHandler // complete handler redux */ public interface InterfacingHandler { diff --git a/core/src/main/java/me/aurium/branch/interfacing/handlers/MessageMap.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/MessageMap.java similarity index 83% rename from core/src/main/java/me/aurium/branch/interfacing/handlers/MessageMap.java rename to branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/MessageMap.java index 481f808..f5385ac 100644 --- a/core/src/main/java/me/aurium/branch/interfacing/handlers/MessageMap.java +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/MessageMap.java @@ -19,11 +19,10 @@ * */ -package me.aurium.branch.interfacing.handlers; +package xyz.auriium.branch.interfacing.handlers; -import me.aurium.branch.interfacing.Message; -import me.aurium.branch.interfacing.Response; -import me.aurium.branch.interfacing.ResponseAction; +import xyz.auriium.branch.interfacing.Response; +import xyz.auriium.branch.interfacing.ResponseAction; public interface MessageMap { diff --git a/core/src/main/java/me/aurium/branch/information/description/Description.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/information/description/Description.java similarity index 93% rename from core/src/main/java/me/aurium/branch/information/description/Description.java rename to branch-core/src/main/java/xyz/auriium/branch/interfacing/information/description/Description.java index f5904d9..28a1d68 100644 --- a/core/src/main/java/me/aurium/branch/information/description/Description.java +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/information/description/Description.java @@ -19,7 +19,7 @@ * */ -package me.aurium.branch.information.description; +package xyz.auriium.branch.interfacing.information.description; public interface Description { diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/information/description/GeneratingDescription.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/information/description/GeneratingDescription.java new file mode 100644 index 0000000..4de2ba0 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/information/description/GeneratingDescription.java @@ -0,0 +1,22 @@ +package xyz.auriium.branch.interfacing.information.description; + +import java.util.function.Supplier; + +/** + * Represents a description that can calculate a response whenever called + * + * Potential usecase: command that updates it's description whenever a global command is on cooldown? idk + */ +public class GeneratingDescription implements Description{ + + private final Supplier generator; + + public GeneratingDescription(Supplier generator) { + this.generator = generator; + } + + @Override + public String getTextDescription() { + return generator.get(); + } +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/information/description/LazyGeneratingDescription.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/information/description/LazyGeneratingDescription.java new file mode 100644 index 0000000..3657bd3 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/information/description/LazyGeneratingDescription.java @@ -0,0 +1,28 @@ +package xyz.auriium.branch.interfacing.information.description; + +import java.util.function.Supplier; + +/** + * Represents generator that generates it's description once whenever it is requested to. + * Functions like a lazy developer's singleton. Use this if you don't want heavy logic being called often. + * + * A potential use case of this: idk argnode + */ +public class LazyGeneratingDescription implements Description{ + + private final Supplier generator; + private volatile String generated; + + public LazyGeneratingDescription(Supplier generator) { + this.generator = generator; + } + + @Override + public String getTextDescription() { + if (generated == null) { + generated = generator.get(); + } + + return generated; + } +} diff --git a/core/src/main/java/me/aurium/branch/information/description/StringDescription.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/information/description/StringDescription.java similarity index 70% rename from core/src/main/java/me/aurium/branch/information/description/StringDescription.java rename to branch-core/src/main/java/xyz/auriium/branch/interfacing/information/description/StringDescription.java index ae7d769..4157621 100644 --- a/core/src/main/java/me/aurium/branch/information/description/StringDescription.java +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/information/description/StringDescription.java @@ -1,5 +1,8 @@ -package me.aurium.branch.information.description; +package xyz.auriium.branch.interfacing.information.description; +/** + * Immutable description returning a simple string + */ public class StringDescription implements Description { private final String textDescription; diff --git a/core/src/main/java/me/aurium/branch/information/help/HelpEntry.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/information/help/HelpEntry.java similarity index 93% rename from core/src/main/java/me/aurium/branch/information/help/HelpEntry.java rename to branch-core/src/main/java/xyz/auriium/branch/interfacing/information/help/HelpEntry.java index 65cf9c9..92a0228 100644 --- a/core/src/main/java/me/aurium/branch/information/help/HelpEntry.java +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/information/help/HelpEntry.java @@ -19,7 +19,7 @@ * */ -package me.aurium.branch.information.help; +package xyz.auriium.branch.interfacing.information.help; public interface HelpEntry { } diff --git a/core/src/main/java/me/aurium/branch/information/help/Shit.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/information/help/Shit.java similarity index 93% rename from core/src/main/java/me/aurium/branch/information/help/Shit.java rename to branch-core/src/main/java/xyz/auriium/branch/interfacing/information/help/Shit.java index 4ad9f20..2470443 100644 --- a/core/src/main/java/me/aurium/branch/information/help/Shit.java +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/information/help/Shit.java @@ -19,7 +19,7 @@ * */ -package me.aurium.branch.information.help; +package xyz.auriium.branch.interfacing.information.help; public class Shit { diff --git a/core/src/main/java/me/aurium/branch/interfacing/responses/FailedAdaptingResponse.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/responses/FailedAdaptingResponse.java similarity index 93% rename from core/src/main/java/me/aurium/branch/interfacing/responses/FailedAdaptingResponse.java rename to branch-core/src/main/java/xyz/auriium/branch/interfacing/responses/FailedAdaptingResponse.java index 6bf9ddd..1c02265 100644 --- a/core/src/main/java/me/aurium/branch/interfacing/responses/FailedAdaptingResponse.java +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/responses/FailedAdaptingResponse.java @@ -19,9 +19,9 @@ * */ -package me.aurium.branch.interfacing.responses; +package xyz.auriium.branch.interfacing.responses; -import me.aurium.branch.interfacing.Response; +import xyz.auriium.branch.interfacing.Response; /** * Represents a response to the scenario in which a certain object was attempted to be adapted to an extending type diff --git a/core/src/main/java/me/aurium/branch/interfacing/responses/NoIntegratedArgsResponse.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/responses/NoIntegratedArgsResponse.java similarity index 90% rename from core/src/main/java/me/aurium/branch/interfacing/responses/NoIntegratedArgsResponse.java rename to branch-core/src/main/java/xyz/auriium/branch/interfacing/responses/NoIntegratedArgsResponse.java index fe37378..ad2c692 100644 --- a/core/src/main/java/me/aurium/branch/interfacing/responses/NoIntegratedArgsResponse.java +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/responses/NoIntegratedArgsResponse.java @@ -19,12 +19,10 @@ * */ -package me.aurium.branch.interfacing.responses; +package xyz.auriium.branch.interfacing.responses; -import me.aurium.branch.execution.NodeContext; -import me.aurium.branch.interfacing.Response; +import xyz.auriium.branch.interfacing.Response; -import java.util.ArrayList; import java.util.List; //This can probably be improved diff --git a/core/src/main/java/me/aurium/branch/interfacing/responses/NoPermissionResponse.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/responses/NoPermissionResponse.java similarity index 91% rename from core/src/main/java/me/aurium/branch/interfacing/responses/NoPermissionResponse.java rename to branch-core/src/main/java/xyz/auriium/branch/interfacing/responses/NoPermissionResponse.java index dc50a4f..d29053e 100644 --- a/core/src/main/java/me/aurium/branch/interfacing/responses/NoPermissionResponse.java +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/responses/NoPermissionResponse.java @@ -19,9 +19,9 @@ * */ -package me.aurium.branch.interfacing.responses; +package xyz.auriium.branch.interfacing.responses; -import me.aurium.branch.interfacing.Response; +import xyz.auriium.branch.interfacing.Response; public class NoPermissionResponse implements Response { diff --git a/core/src/main/java/me/aurium/branch/interfacing/responses/TooManyArgsResponse.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/responses/TooManyArgsResponse.java similarity index 92% rename from core/src/main/java/me/aurium/branch/interfacing/responses/TooManyArgsResponse.java rename to branch-core/src/main/java/xyz/auriium/branch/interfacing/responses/TooManyArgsResponse.java index 12b79b8..78538c7 100644 --- a/core/src/main/java/me/aurium/branch/interfacing/responses/TooManyArgsResponse.java +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/responses/TooManyArgsResponse.java @@ -19,9 +19,9 @@ * */ -package me.aurium.branch.interfacing.responses; +package xyz.auriium.branch.interfacing.responses; -import me.aurium.branch.interfacing.Response; +import xyz.auriium.branch.interfacing.Response; public class TooManyArgsResponse implements Response { diff --git a/core/src/main/java/me/aurium/branch/nodes/Builder.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/Builder.java similarity index 96% rename from core/src/main/java/me/aurium/branch/nodes/Builder.java rename to branch-core/src/main/java/xyz/auriium/branch/nodes/Builder.java index 92f4a21..0ba044f 100644 --- a/core/src/main/java/me/aurium/branch/nodes/Builder.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/Builder.java @@ -19,7 +19,7 @@ * */ -package me.aurium.branch.nodes; +package xyz.auriium.branch.nodes; public interface Builder{ diff --git a/core/src/main/java/me/aurium/branch/nodes/CommandNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/CommandNode.java similarity index 69% rename from core/src/main/java/me/aurium/branch/nodes/CommandNode.java rename to branch-core/src/main/java/xyz/auriium/branch/nodes/CommandNode.java index f02b322..b7962ae 100644 --- a/core/src/main/java/me/aurium/branch/nodes/CommandNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/CommandNode.java @@ -19,14 +19,16 @@ * */ -package me.aurium.branch.nodes; +package xyz.auriium.branch.nodes; -import me.aurium.branch.execution.api.BranchHandler; -import me.aurium.branch.information.description.Description; -import me.aurium.branch.nodes.results.SearchInput; -import me.aurium.branch.nodes.results.SearchInfo; -import me.aurium.branch.fallback.permissions.Permission; -import me.aurium.branch.nodes.results.model.Result; +import xyz.auriium.branch.execution.NodeContext; +import xyz.auriium.branch.execution.api.Execution; +import xyz.auriium.branch.execution.api.SuggestionHandler; +import xyz.auriium.branch.interfacing.information.description.Description; +import xyz.auriium.branch.nodes.results.SearchInput; +import xyz.auriium.branch.nodes.results.SearchInfo; +import xyz.auriium.branch.fallback.permissions.Permission; +import xyz.auriium.branch.nodes.results.model.Result; /** * Base object @@ -37,7 +39,9 @@ public interface CommandNode { //int getExpectedConsumeAmount() //used to check how much was expected as you pass through vs how much was received, among other htings. Result> getSpecificNode(SearchInput path); - BranchHandler getHandling(); + + Result> getExecution(NodeContext context); + SuggestionHandler getSuggestionHandler(); /** diff --git a/core/src/main/java/me/aurium/branch/nodes/single/EndpointNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/EndpointNode.java similarity index 82% rename from core/src/main/java/me/aurium/branch/nodes/single/EndpointNode.java rename to branch-core/src/main/java/xyz/auriium/branch/nodes/EndpointNode.java index 5a08eff..47c71f5 100644 --- a/core/src/main/java/me/aurium/branch/nodes/single/EndpointNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/EndpointNode.java @@ -19,12 +19,12 @@ * */ -package me.aurium.branch.nodes.single; +package xyz.auriium.branch.nodes; -import me.aurium.branch.nodes.IdentifiableNode; -import me.aurium.branch.nodes.results.SearchInfo; -import me.aurium.branch.nodes.results.SearchInput; -import me.aurium.branch.nodes.results.model.Result; +import xyz.auriium.branch.nodes.IdentifiableNode; +import xyz.auriium.branch.nodes.results.SearchInfo; +import xyz.auriium.branch.nodes.results.SearchInput; +import xyz.auriium.branch.nodes.results.model.Result; /** * A node that cannot point to any node other than itself (and therefore ends the branching of a node-path) diff --git a/core/src/main/java/me/aurium/branch/nodes/IdentifiableNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/IdentifiableNode.java similarity index 86% rename from core/src/main/java/me/aurium/branch/nodes/IdentifiableNode.java rename to branch-core/src/main/java/xyz/auriium/branch/nodes/IdentifiableNode.java index f454cab..74620c2 100644 --- a/core/src/main/java/me/aurium/branch/nodes/IdentifiableNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/IdentifiableNode.java @@ -19,10 +19,9 @@ * */ -package me.aurium.branch.nodes; +package xyz.auriium.branch.nodes; -import me.aurium.branch.execution.Block; -import me.aurium.branch.information.description.Description; +import xyz.auriium.branch.execution.Block; public interface IdentifiableNode extends CommandNode { diff --git a/core/src/main/java/me/aurium/branch/nodes/ResponseHandler.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/ResponseHandler.java similarity index 96% rename from core/src/main/java/me/aurium/branch/nodes/ResponseHandler.java rename to branch-core/src/main/java/xyz/auriium/branch/nodes/ResponseHandler.java index 561b9f7..3e38277 100644 --- a/core/src/main/java/me/aurium/branch/nodes/ResponseHandler.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/ResponseHandler.java @@ -19,7 +19,7 @@ * */ -package me.aurium.branch.nodes; +package xyz.auriium.branch.nodes; public class ResponseHandler { } diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/AbstractArgNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/AbstractArgNode.java new file mode 100644 index 0000000..e3c3e96 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/AbstractArgNode.java @@ -0,0 +1,60 @@ +package xyz.auriium.branch.nodes.argument; + +import xyz.auriium.branch.execution.Block; +import xyz.auriium.branch.execution.NodeContext; +import xyz.auriium.branch.execution.api.ArgExecution; +import xyz.auriium.branch.execution.api.Execution; +import xyz.auriium.branch.execution.api.SuggestionHandler; +import xyz.auriium.branch.nodes.results.model.Result; +import xyz.auriium.branch.nodes.EndpointNode; + +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.Deque; +import java.util.List; + +public abstract class AbstractArgNode extends EndpointNode { + + protected abstract List> getArguments(); + protected abstract ArgumentContextHandler getContextHandler(); + + @Override + public Result> getExecution(NodeContext context) { + + + Arguments argumentObject = new Arguments(); + Deque subdeque = new ArrayDeque<>(context.getResults().reducedPath()); + + for (ContextualBaseArgument argument : getArguments()) { + + if (subdeque.peek() == null) return Result.fail(null); //noInputProvidedExternal if there + + assert argument.reservedBlockAmount() > 0 : "Cannot be negative or zero"; + + List collect = new ArrayList<>(); + + for (int v = 0; v < argument.reservedBlockAmount(); ++v) { + Block blk = subdeque.pollFirst(); + + if (blk == null) return Result.fail(null); //noInputProvidedInternal if theres not enough for the NEXT RESERVATION inside this arg + + collect.add(blk); + } + + Result res = argument.parse(context.getSender(), context.getAlias(), collect); + + if (!res.isSuccessful()) { + return Result.transmuteFail(res); + } + + argumentObject.put(argument.getLabel(), res.getSuccess()); + } + + return Result.success(new ArgExecution<>(getContextHandler(), context, argumentObject)); + } + + @Override + public SuggestionHandler getSuggestionHandler() { + return null; //TODO + } +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ArgNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ArgNode.java new file mode 100644 index 0000000..425ab20 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ArgNode.java @@ -0,0 +1,65 @@ +package xyz.auriium.branch.nodes.argument; + +import xyz.auriium.branch.execution.Block; +import xyz.auriium.branch.fallback.permissions.EmptyPermission; +import xyz.auriium.branch.fallback.permissions.Permission; +import xyz.auriium.branch.interfacing.information.description.Description; +import xyz.auriium.branch.interfacing.information.description.StringDescription; + +import java.util.List; + +/** + * Argument-consuming node. The most important part of branch (not) + * + * @param input type + */ +public class ArgNode extends AbstractArgNode { + + private final Block identifier; + private final Permission permission; + private final Description description; + private final List> arguments; + private final ArgumentContextHandler handler; + + public ArgNode(Block identifier, Permission permission, Description description, List> arguments, ArgumentContextHandler handler) { + this.identifier = identifier; + this.permission = permission; + this.description = description; + this.arguments = arguments; + this.handler = handler; + } + + public static ArgNode of(Block identifier, Permission permission, Description description, List> arguments, ArgumentContextHandler handler) { + return new ArgNode<>(identifier, permission, description, arguments, handler); + } + + public static ArgNode of(Block identifier, List> arguments, ArgumentContextHandler handler) { + return new ArgNode<>(identifier, new EmptyPermission<>(), new StringDescription("TODO"), arguments, handler); //TODO impl + } + + + @Override + public Permission getPermission() { + return permission; + } + + @Override + public Description getDescription() { + return description; + } + + @Override + public Block getIdentifier() { + return identifier; + } + + @Override + protected List> getArguments() { + return arguments; + } + + @Override + protected ArgumentContextHandler getContextHandler() { + return handler; + } +} diff --git a/core/src/main/java/me/aurium/branch/execution/api/BranchHandler.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ArgumentContext.java similarity index 60% rename from core/src/main/java/me/aurium/branch/execution/api/BranchHandler.java rename to branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ArgumentContext.java index ac450b6..291e741 100644 --- a/core/src/main/java/me/aurium/branch/execution/api/BranchHandler.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ArgumentContext.java @@ -19,20 +19,25 @@ * */ -package me.aurium.branch.execution.api; +package xyz.auriium.branch.nodes.argument; -import me.aurium.branch.execution.NodeContext; -import me.aurium.branch.nodes.results.model.Result; +import xyz.auriium.branch.execution.NodeContext; -import java.util.List; +public class ArgumentContext { -/** - * Represents the actable behavior of a node once the node has been found - e.g. after the node's search logic is complete - * @param sender - */ -public interface BranchHandler { + private final NodeContext nodeContext; + private final Arguments arguments; + + public ArgumentContext(NodeContext nodeContext, Arguments arguments) { + this.nodeContext = nodeContext; + this.arguments = arguments; + } - Execution getExecution(NodeContext context); - List getSuggestions(NodeContext context); + public NodeContext getNodeContext() { + return nodeContext; + } + public Arguments getArguments() { + return arguments; + } } diff --git a/core/src/main/java/me/aurium/branch/nodes/argument/ArgumentContextHandler.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ArgumentContextHandler.java similarity index 84% rename from core/src/main/java/me/aurium/branch/nodes/argument/ArgumentContextHandler.java rename to branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ArgumentContextHandler.java index f51351c..04eb14c 100644 --- a/core/src/main/java/me/aurium/branch/nodes/argument/ArgumentContextHandler.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ArgumentContextHandler.java @@ -19,10 +19,11 @@ * */ -package me.aurium.branch.nodes.argument; +package xyz.auriium.branch.nodes.argument; -public interface ArgumentContextHandler { +public interface ArgumentContextHandler { + + void handle(ArgumentContext argumentContext); - void handle(ArgumentContext context); } diff --git a/core/src/main/java/me/aurium/branch/nodes/argument/Arguments.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/Arguments.java similarity index 58% rename from core/src/main/java/me/aurium/branch/nodes/argument/Arguments.java rename to branch-core/src/main/java/xyz/auriium/branch/nodes/argument/Arguments.java index 47d9327..665fcc1 100644 --- a/core/src/main/java/me/aurium/branch/nodes/argument/Arguments.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/Arguments.java @@ -19,7 +19,28 @@ * */ -package me.aurium.branch.nodes.argument; +package xyz.auriium.branch.nodes.argument; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +/** + * Object for storing and returning arguments of a command + */ public class Arguments { + + private final Map map = new HashMap<>(); + + public Optional getOptional(String identifier) { + return (Optional) Optional.ofNullable(map.get(identifier)); + } + + public T get(String identifier) { + return (T) map.get(identifier); + } + + void put(String identifier, Object object) { + this.map.put(identifier, object); + } } diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ContextualBaseArgument.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ContextualBaseArgument.java new file mode 100644 index 0000000..363cd7c --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ContextualBaseArgument.java @@ -0,0 +1,60 @@ +package xyz.auriium.branch.nodes.argument; + +import xyz.auriium.branch.execution.Block; +import xyz.auriium.branch.execution.NodeContext; +import xyz.auriium.branch.nodes.results.model.Result; + +import java.util.List; +import java.util.Queue; + +/** + * Base-type SPI interface describing an + * argument that requires information about the node's contextual sender base + * + * Convention dictates that when writing an argument instantiation of said argument will be done + * via the use of a static #of method with a private constructor. + * + * @param input type of command node + * @param output type of argument parsing e.g. world or string + */ +public interface ContextualBaseArgument { + + /** + * Method used for reflective-type parsing (interface scanners like ProxyNode) + * @return output -type class + */ + Class outputClass(); + + /** + * Method describing the single-word "type" of this argument, like + * "StringArgument" or "IntegerArgument" + * + * @return the type + */ + String getType(); + + /** + * Method describing what label this argument uses + * Label is typically defined by the user of the framework + * + * @return the label + */ + String getLabel(); + + /** + * Method describing how many blocks this argument reserves + * @return the amount of blocks this argument requires + */ + int reservedBlockAmount(); + + /** + * Method describing how this object parses + * + * Always assume that {@param reserved} contains the exact amount of arguments you requested. + * It will never contain only 1 if you request 2, and will never be empty if you request 1. + * + * @return a result describing the execution success of parsing + */ + Result parse(T sender, String alias, List reserved); + +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/IgnorantBaseArgument.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/IgnorantBaseArgument.java new file mode 100644 index 0000000..217257c --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/IgnorantBaseArgument.java @@ -0,0 +1,8 @@ +package xyz.auriium.branch.nodes.argument; + +/** + * Base argument that ignores context + * @param the type of object returned by parsing + */ +public interface IgnorantBaseArgument extends ContextualBaseArgument { +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/SingleContextualArgument.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/SingleContextualArgument.java new file mode 100644 index 0000000..b516366 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/SingleContextualArgument.java @@ -0,0 +1,21 @@ +package xyz.auriium.branch.nodes.argument; + +import xyz.auriium.branch.execution.Block; +import xyz.auriium.branch.nodes.results.model.Result; + +import java.util.List; + +public interface SingleContextualArgument extends ContextualBaseArgument { + + @Override + default int reservedBlockAmount() { + return 1; + } + + @Override + default Result parse(T sender, String alias, List reserved) { + return microParse(sender,alias,reserved.get(0)); + } + + Result microParse(T sender, String alias, Block toParse); +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/SingleIgnorantArgument.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/SingleIgnorantArgument.java new file mode 100644 index 0000000..9374459 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/SingleIgnorantArgument.java @@ -0,0 +1,4 @@ +package xyz.auriium.branch.nodes.argument; + +public interface SingleIgnorantArgument extends SingleContextualArgument { +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/implement/DefaultingArgNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/implement/DefaultingArgNode.java new file mode 100644 index 0000000..497df4e --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/implement/DefaultingArgNode.java @@ -0,0 +1,13 @@ +package xyz.auriium.branch.nodes.argument.implement; + +import xyz.auriium.branch.fallback.permissions.EmptyPermission; +import xyz.auriium.branch.fallback.permissions.Permission; + +public abstract class DefaultingArgNode extends ImplementableArgNode { + + @Override + public Permission getPermission() { + return new EmptyPermission<>(); + } + +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/implement/ImplementableArgNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/implement/ImplementableArgNode.java new file mode 100644 index 0000000..5962217 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/implement/ImplementableArgNode.java @@ -0,0 +1,19 @@ +package xyz.auriium.branch.nodes.argument.implement; + +import xyz.auriium.branch.nodes.argument.AbstractArgNode; +import xyz.auriium.branch.nodes.argument.ArgumentContext; +import xyz.auriium.branch.nodes.argument.ArgumentContextHandler; + +public abstract class ImplementableArgNode extends AbstractArgNode { + + @Override + protected ArgumentContextHandler getContextHandler() { + return this::onExecution; + } + + /** + * Method representing the execution of the node + * @param context pojo representing arguments + default context + */ + abstract void onExecution(ArgumentContext context); +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/types/StringArgument.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/types/StringArgument.java new file mode 100644 index 0000000..e1e3da1 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/types/StringArgument.java @@ -0,0 +1,39 @@ +package xyz.auriium.branch.nodes.argument.types; + +import xyz.auriium.branch.execution.Block; +import xyz.auriium.branch.nodes.argument.SingleIgnorantArgument; +import xyz.auriium.branch.nodes.results.model.Result; + +public class StringArgument implements SingleIgnorantArgument { + + private final String label; + + StringArgument(String label) { + this.label = label; + } + + public static StringArgument of(String label) { + return new StringArgument(label); + } + + + @Override + public Class outputClass() { + return String.class; + } + + @Override + public String getType() { + return "StringArgument"; + } + + @Override + public String getLabel() { + return label; + } + + @Override + public Result microParse(Object sender, String alias, Block toParse) { + return null; + } +} diff --git a/core/src/main/java/me/aurium/branch/nodes/branching/BranchingNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/BranchingNode.java similarity index 60% rename from core/src/main/java/me/aurium/branch/nodes/branching/BranchingNode.java rename to branch-core/src/main/java/xyz/auriium/branch/nodes/branching/BranchingNode.java index c9cde4b..9238cd2 100644 --- a/core/src/main/java/me/aurium/branch/nodes/branching/BranchingNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/BranchingNode.java @@ -19,19 +19,18 @@ * */ -package me.aurium.branch.nodes.branching; - -import me.aurium.branch.execution.Block; -import me.aurium.branch.execution.api.BranchHandler; -import me.aurium.branch.execution.api.Execution; -import me.aurium.branch.execution.NodeContext; -import me.aurium.branch.information.description.Description; -import me.aurium.branch.interfacing.responses.NoIntegratedArgsResponse; -import me.aurium.branch.nodes.IdentifiableNode; -import me.aurium.branch.fallback.permissions.Permission; -import me.aurium.branch.nodes.results.model.Result; -import me.aurium.branch.nodes.results.SearchInfo; -import me.aurium.branch.nodes.results.SearchInput; +package xyz.auriium.branch.nodes.branching; + +import xyz.auriium.branch.execution.Block; +import xyz.auriium.branch.execution.api.Execution; +import xyz.auriium.branch.execution.NodeContext; +import xyz.auriium.branch.execution.api.SuggestionHandler; +import xyz.auriium.branch.interfacing.information.description.Description; +import xyz.auriium.branch.nodes.IdentifiableNode; +import xyz.auriium.branch.fallback.permissions.Permission; +import xyz.auriium.branch.nodes.results.model.Result; +import xyz.auriium.branch.nodes.results.SearchInfo; +import xyz.auriium.branch.nodes.results.SearchInput; import java.util.ArrayList; import java.util.List; @@ -45,18 +44,26 @@ public class BranchingNode implements IdentifiableNode { private final PrestoredSet nodes; private final Block path; - private final BranchHandler handler; private final Description description; - private final Permission permission; + private final SuggestionHandler suggestion; public BranchingNode(PrestoredSet nodes, Block path, Description description, Permission permission) { this.nodes = nodes; this.path = path; this.description = description; this.permission = permission; + this.suggestion = (ctx) -> { + List strings = new ArrayList<>(); - this.handler = new BranchingHandler<>(nodes); + for (IdentifiableNode node : nodes.getContents()) { + if (node.getPermission().attempt(ctx) && node.getIdentifier().isVisual()) { + strings.add(node.getIdentifier()); + } + } + + return strings; + }; } @Override @@ -90,44 +97,19 @@ public Result> getSpecificNode(SearchInput input) { return Result.success(new SearchInfo<>(this,input)); } - @Override - public BranchHandler getHandling() { - return handler; - } - @Override public Permission getPermission() { return permission; } - public static final class BranchingHandler implements BranchHandler { - - private final PrestoredSet nodeShit; - - public BranchingHandler(PrestoredSet nodeShit) { - this.nodeShit = nodeShit; - } - - - @Override - public Execution getExecution(NodeContext context) { - return nodeShit.getSideNode().getHandling().getExecution(context); - } - - @Override - public List getSuggestions(NodeContext context) { - - List strings = new ArrayList<>(); - - for (IdentifiableNode node : nodeShit.getContents()) { - if (node.getPermission().attempt(context) && node.getIdentifier().isVisual()) { - strings.add(node.getIdentifier().getIdentifier()); - } - } - - return strings; - } + @Override + public Result> getExecution(NodeContext context) { + return nodes.getSideNode().getExecution(context); + } + @Override + public SuggestionHandler getSuggestionHandler() { + return suggestion; } diff --git a/core/src/main/java/me/aurium/branch/nodes/branching/ExclusiveBranchingBuilder.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/ExclusiveBranchingBuilder.java similarity index 69% rename from core/src/main/java/me/aurium/branch/nodes/branching/ExclusiveBranchingBuilder.java rename to branch-core/src/main/java/xyz/auriium/branch/nodes/branching/ExclusiveBranchingBuilder.java index 5f4cb7a..6e0ad0f 100644 --- a/core/src/main/java/me/aurium/branch/nodes/branching/ExclusiveBranchingBuilder.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/ExclusiveBranchingBuilder.java @@ -1,15 +1,15 @@ -package me.aurium.branch.nodes.branching; - -import me.aurium.branch.execution.Block; -import me.aurium.branch.execution.StringBlock; -import me.aurium.branch.fallback.permissions.EmptyPermission; -import me.aurium.branch.fallback.permissions.Permission; -import me.aurium.branch.information.description.Description; -import me.aurium.branch.information.description.StringDescription; -import me.aurium.branch.nodes.single.HelpNode; -import me.aurium.branch.nodes.Builder; -import me.aurium.branch.nodes.CommandNode; -import me.aurium.branch.nodes.IdentifiableNode; +package xyz.auriium.branch.nodes.branching; + +import xyz.auriium.branch.execution.Block; +import xyz.auriium.branch.execution.StringBlock; +import xyz.auriium.branch.fallback.permissions.EmptyPermission; +import xyz.auriium.branch.fallback.permissions.Permission; +import xyz.auriium.branch.interfacing.information.description.Description; +import xyz.auriium.branch.interfacing.information.description.StringDescription; +import xyz.auriium.branch.nodes.help.HelpNode; +import xyz.auriium.branch.nodes.Builder; +import xyz.auriium.branch.nodes.CommandNode; +import xyz.auriium.branch.nodes.IdentifiableNode; import java.util.HashSet; import java.util.Objects; @@ -27,7 +27,6 @@ public class ExclusiveBranchingBuilder implements Builder { public ExclusiveBranchingBuilder() { this.commands = new HashSet<>(); this.permission = new EmptyPermission<>(); - this.noArgs = new HelpNode<>(); } public ExclusiveBranchingBuilder withIdentifier(Block block) { @@ -66,14 +65,16 @@ public ExclusiveBranchingBuilder withNoArgs(CommandNode node) { return this; } - public CommandNode build() { + public IdentifiableNode build() { Objects.requireNonNull(block); Objects.requireNonNull(permission); - Objects.requireNonNull(noArgs); - Description returned = Objects.requireNonNullElse(description,new StringDescription("Default description for subcommand " + block.getIdentifier())); + if (noArgs == null) { + noArgs = HelpNode.of(permission,returned); + } + return new BranchingNode<>(new ExclusivePrestoredSet<>(noArgs,commands),block, returned, permission); } diff --git a/core/src/main/java/me/aurium/branch/nodes/branching/ExclusivePrestoredSet.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/ExclusivePrestoredSet.java similarity index 80% rename from core/src/main/java/me/aurium/branch/nodes/branching/ExclusivePrestoredSet.java rename to branch-core/src/main/java/xyz/auriium/branch/nodes/branching/ExclusivePrestoredSet.java index 89ac489..fd761df 100644 --- a/core/src/main/java/me/aurium/branch/nodes/branching/ExclusivePrestoredSet.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/ExclusivePrestoredSet.java @@ -1,7 +1,7 @@ -package me.aurium.branch.nodes.branching; +package xyz.auriium.branch.nodes.branching; -import me.aurium.branch.nodes.CommandNode; -import me.aurium.branch.nodes.IdentifiableNode; +import xyz.auriium.branch.nodes.CommandNode; +import xyz.auriium.branch.nodes.IdentifiableNode; import java.util.Set; diff --git a/core/src/main/java/me/aurium/branch/nodes/branching/InclusiveBranchingBuilder.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/InclusiveBranchingBuilder.java similarity index 77% rename from core/src/main/java/me/aurium/branch/nodes/branching/InclusiveBranchingBuilder.java rename to branch-core/src/main/java/xyz/auriium/branch/nodes/branching/InclusiveBranchingBuilder.java index 4700a4f..0446680 100644 --- a/core/src/main/java/me/aurium/branch/nodes/branching/InclusiveBranchingBuilder.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/InclusiveBranchingBuilder.java @@ -19,19 +19,18 @@ * */ -package me.aurium.branch.nodes.branching; - -import me.aurium.branch.execution.Block; -import me.aurium.branch.execution.StringBlock; -import me.aurium.branch.fallback.permissions.Permission; -import me.aurium.branch.fallback.permissions.EmptyPermission; -import me.aurium.branch.information.description.Description; -import me.aurium.branch.information.description.StringDescription; -import me.aurium.branch.nodes.single.EndpointNode; -import me.aurium.branch.nodes.single.HelpNode; -import me.aurium.branch.nodes.Builder; -import me.aurium.branch.nodes.CommandNode; -import me.aurium.branch.nodes.IdentifiableNode; +package xyz.auriium.branch.nodes.branching; + +import xyz.auriium.branch.execution.Block; +import xyz.auriium.branch.execution.StringBlock; +import xyz.auriium.branch.fallback.permissions.Permission; +import xyz.auriium.branch.fallback.permissions.EmptyPermission; +import xyz.auriium.branch.interfacing.information.description.Description; +import xyz.auriium.branch.interfacing.information.description.StringDescription; +import xyz.auriium.branch.nodes.EndpointNode; +import xyz.auriium.branch.nodes.help.HelpNode; +import xyz.auriium.branch.nodes.Builder; +import xyz.auriium.branch.nodes.IdentifiableNode; import java.util.HashSet; import java.util.Objects; @@ -49,7 +48,6 @@ public class InclusiveBranchingBuilder implements Builder { public InclusiveBranchingBuilder() { this.commands = new HashSet<>(); this.permission = new EmptyPermission<>(); - this.noArgs = new HelpNode<>(); } public InclusiveBranchingBuilder withIdentifier(Block block) { @@ -88,14 +86,16 @@ public InclusiveBranchingBuilder withDescription(Description description) { return this; } - public CommandNode build() { + public IdentifiableNode build() { Objects.requireNonNull(block); Objects.requireNonNull(permission); - Objects.requireNonNull(noArgs); - Description returned = Objects.requireNonNullElse(description,new StringDescription("Default description for subcommand " + block.getIdentifier())); + if (noArgs == null) { + noArgs = HelpNode.of(permission,returned); + } + return new BranchingNode<>(new InclusivePrestoredSet<>(noArgs,commands),block, returned, permission); } diff --git a/core/src/main/java/me/aurium/branch/nodes/branching/InclusivePrestoredSet.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/InclusivePrestoredSet.java similarity index 81% rename from core/src/main/java/me/aurium/branch/nodes/branching/InclusivePrestoredSet.java rename to branch-core/src/main/java/xyz/auriium/branch/nodes/branching/InclusivePrestoredSet.java index cadde13..2669bba 100644 --- a/core/src/main/java/me/aurium/branch/nodes/branching/InclusivePrestoredSet.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/InclusivePrestoredSet.java @@ -1,10 +1,11 @@ -package me.aurium.branch.nodes.branching; +package xyz.auriium.branch.nodes.branching; -import me.aurium.branch.nodes.IdentifiableNode; +import xyz.auriium.branch.nodes.IdentifiableNode; import java.util.HashSet; import java.util.Set; +//TODO refactor so that otherThingsInTheSet already containes alreadyStored public class InclusivePrestoredSet implements PrestoredSet { private final IdentifiableNode alreadyStored; diff --git a/core/src/main/java/me/aurium/branch/nodes/branching/PrestoredSet.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/PrestoredSet.java similarity index 50% rename from core/src/main/java/me/aurium/branch/nodes/branching/PrestoredSet.java rename to branch-core/src/main/java/xyz/auriium/branch/nodes/branching/PrestoredSet.java index bc164f2..7cf7081 100644 --- a/core/src/main/java/me/aurium/branch/nodes/branching/PrestoredSet.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/PrestoredSet.java @@ -1,7 +1,7 @@ -package me.aurium.branch.nodes.branching; +package xyz.auriium.branch.nodes.branching; -import me.aurium.branch.nodes.CommandNode; -import me.aurium.branch.nodes.IdentifiableNode; +import xyz.auriium.branch.nodes.CommandNode; +import xyz.auriium.branch.nodes.IdentifiableNode; import java.util.Set; diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/help/HelpNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/help/HelpNode.java new file mode 100644 index 0000000..b95f5ae --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/help/HelpNode.java @@ -0,0 +1,96 @@ +/* + * + * Branch + * Copyright © 2021 Aurium + * + * Branch is free software: you can redistribute it and/or modify + * It under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * Branch is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Branch. If not, see + * and navigate to version 3 of the GNU Affero General Public License. + * + */ + +package xyz.auriium.branch.nodes.help; + +import xyz.auriium.branch.execution.Block; +import xyz.auriium.branch.execution.NodeContext; +import xyz.auriium.branch.execution.StringBlock; +import xyz.auriium.branch.execution.api.BasicExecution; +import xyz.auriium.branch.execution.api.Execution; +import xyz.auriium.branch.execution.api.SuggestionHandler; +import xyz.auriium.branch.fallback.permissions.Permission; +import xyz.auriium.branch.interfacing.information.description.Description; +import xyz.auriium.branch.nodes.EndpointNode; +import xyz.auriium.branch.nodes.results.SearchInfo; +import xyz.auriium.branch.nodes.results.SearchInput; +import xyz.auriium.branch.nodes.results.model.Result; + +import java.util.ArrayList; +import java.util.List; + +/** + * Represents a node that pregenerates help entries based on the message context + */ +public class HelpNode extends EndpointNode { + + private final Block identifier; + private final Permission permission; + private final Description description; + + public HelpNode(Block identifier, Permission permission, Description description) { + this.identifier = identifier; + this.permission = permission; + this.description = description; + } + + @Override + public Permission getPermission() { + return permission; + } + + @Override + public Block getIdentifier() { + return identifier; + } + + @Override + public Description getDescription() { + return description; + } + + @Override + public Result> getExecution(NodeContext context) { + return Result.success(new BasicExecution<>(ct -> { + + List blocks = new ArrayList<>(); + String[] strong = ct.getArgs(); + + for (int i = 0; i < strong.length - 1; i++) { + blocks.add(StringBlock.of(strong[i])); + } + + Result> toBeExecuted = context.getBaseExecutedNode().getSpecificNode(SearchInput.of(blocks)); + + toBeExecuted.getSuccess().resultingNode(); + + }, context)); + } + + @Override + public SuggestionHandler getSuggestionHandler() { + return null; //TODO + } + + public static HelpNode of(Permission permission, Description description) { + return new HelpNode(new StringBlock("help"), permission, description); + } +} diff --git a/core/src/main/java/me/aurium/branch/nodes/ProxyNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/proxy/ProxyNode.java similarity index 76% rename from core/src/main/java/me/aurium/branch/nodes/ProxyNode.java rename to branch-core/src/main/java/xyz/auriium/branch/nodes/proxy/ProxyNode.java index 565307d..d96c77c 100644 --- a/core/src/main/java/me/aurium/branch/nodes/ProxyNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/proxy/ProxyNode.java @@ -1,4 +1,4 @@ -package me.aurium.branch.nodes; +package xyz.auriium.branch.nodes.proxy; /** * Represents a node that can dynamically convert a specified ProxyInterface into arguments diff --git a/core/src/main/java/me/aurium/branch/nodes/results/SearchInfo.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/SearchInfo.java similarity index 71% rename from core/src/main/java/me/aurium/branch/nodes/results/SearchInfo.java rename to branch-core/src/main/java/xyz/auriium/branch/nodes/results/SearchInfo.java index abd6061..4097c0f 100644 --- a/core/src/main/java/me/aurium/branch/nodes/results/SearchInfo.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/SearchInfo.java @@ -19,10 +19,10 @@ * */ -package me.aurium.branch.nodes.results; +package xyz.auriium.branch.nodes.results; -import me.aurium.branch.execution.Block; -import me.aurium.branch.nodes.CommandNode; +import xyz.auriium.branch.execution.Block; +import xyz.auriium.branch.nodes.CommandNode; import java.util.List; @@ -45,10 +45,24 @@ public CommandNode resultingNode() { return calculatedNode; } + /** + * Gets the initial path, essentially the entire ordered list + * of all arguments used for parsing AND remaining arguments + * @return + */ public List initialPath() { return initialPath; } + /** + * Gets the reduced path, essentially, an ordered list of whatever arguments remain after + * parsing by initial node branches. + * + * If the execution is /command branching variable input1 input2, the reduced path would be + * "input1 input2" + * + * @return Ordered list (cloned) + */ public List reducedPath() { return reducedPath; } diff --git a/core/src/main/java/me/aurium/branch/nodes/results/SearchInput.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/SearchInput.java similarity index 87% rename from core/src/main/java/me/aurium/branch/nodes/results/SearchInput.java rename to branch-core/src/main/java/xyz/auriium/branch/nodes/results/SearchInput.java index d44ea2d..1fd7016 100644 --- a/core/src/main/java/me/aurium/branch/nodes/results/SearchInput.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/SearchInput.java @@ -19,10 +19,10 @@ * */ -package me.aurium.branch.nodes.results; +package xyz.auriium.branch.nodes.results; -import me.aurium.branch.execution.Block; -import me.aurium.branch.execution.StringBlock; +import xyz.auriium.branch.execution.Block; +import xyz.auriium.branch.execution.StringBlock; import java.util.ArrayDeque; import java.util.ArrayList; @@ -63,4 +63,8 @@ public static SearchInput of(String[] args) { return new SearchInput(blocks, new ArrayDeque<>(blocks)); } + + public static SearchInput of(List strings) { + return new SearchInput(strings, new ArrayDeque<>(strings)); + } } diff --git a/core/src/main/java/me/aurium/branch/nodes/results/model/FailingResult.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/FailingResult.java similarity index 93% rename from core/src/main/java/me/aurium/branch/nodes/results/model/FailingResult.java rename to branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/FailingResult.java index 0a21da9..244eb0e 100644 --- a/core/src/main/java/me/aurium/branch/nodes/results/model/FailingResult.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/FailingResult.java @@ -19,9 +19,9 @@ * */ -package me.aurium.branch.nodes.results.model; +package xyz.auriium.branch.nodes.results.model; -import me.aurium.branch.interfacing.Response; +import xyz.auriium.branch.interfacing.Response; /** * A result that has failed diff --git a/core/src/main/java/me/aurium/branch/nodes/results/model/Result.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/Result.java similarity index 75% rename from core/src/main/java/me/aurium/branch/nodes/results/model/Result.java rename to branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/Result.java index 8653301..cb61da6 100644 --- a/core/src/main/java/me/aurium/branch/nodes/results/model/Result.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/Result.java @@ -19,9 +19,9 @@ * */ -package me.aurium.branch.nodes.results.model; +package xyz.auriium.branch.nodes.results.model; -import me.aurium.branch.interfacing.Response; +import xyz.auriium.branch.interfacing.Response; public interface Result { @@ -31,11 +31,15 @@ public interface Result { Response getFailure(); - static Result success(X t) { + static SuccessfulResult success(X t) { return new SuccessfulResult<>(t); } - static Result fail(Response failure) { + static FailingResult fail(Response failure) { return new FailingResult<>(failure); } + static Result transmuteFail(Result result) { + return Result.fail(result.getFailure()); + } + } diff --git a/core/src/main/java/me/aurium/branch/nodes/results/model/SuccessfulResult.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/SuccessfulResult.java similarity index 92% rename from core/src/main/java/me/aurium/branch/nodes/results/model/SuccessfulResult.java rename to branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/SuccessfulResult.java index 25174f2..f1cf2be 100644 --- a/core/src/main/java/me/aurium/branch/nodes/results/model/SuccessfulResult.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/SuccessfulResult.java @@ -19,9 +19,9 @@ * */ -package me.aurium.branch.nodes.results.model; +package xyz.auriium.branch.nodes.results.model; -import me.aurium.branch.interfacing.Response; +import xyz.auriium.branch.interfacing.Response; public class SuccessfulResult implements Result { diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/single/AbstractSingleNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/single/AbstractSingleNode.java new file mode 100644 index 0000000..b4ac9c4 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/single/AbstractSingleNode.java @@ -0,0 +1,32 @@ +package xyz.auriium.branch.nodes.single; + +import xyz.auriium.branch.execution.Block; +import xyz.auriium.branch.execution.NodeContext; +import xyz.auriium.branch.execution.api.BasicExecution; +import xyz.auriium.branch.execution.api.Execution; +import xyz.auriium.branch.execution.api.ExecutionHandler; +import xyz.auriium.branch.execution.api.SuggestionHandler; +import xyz.auriium.branch.nodes.EndpointNode; +import xyz.auriium.branch.nodes.results.model.Result; + +import java.util.ArrayList; +import java.util.List; + +public abstract class AbstractSingleNode extends EndpointNode { + + public static List returned = new ArrayList<>(); + + @Override + public SuggestionHandler getSuggestionHandler() { + return (ignored) -> returned; + } + + @Override + public Result> getExecution(NodeContext context) { + //TODO return bad result if search failed / more than 1 result left + + return Result.success(new BasicExecution<>(getHandler(),context)); + } + + protected abstract ExecutionHandler getHandler(); +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/single/SingleNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/single/SingleNode.java new file mode 100644 index 0000000..0ef4298 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/single/SingleNode.java @@ -0,0 +1,52 @@ +package xyz.auriium.branch.nodes.single; + +import xyz.auriium.branch.execution.Block; +import xyz.auriium.branch.execution.api.ExecutionHandler; +import xyz.auriium.branch.fallback.permissions.EmptyPermission; +import xyz.auriium.branch.fallback.permissions.Permission; +import xyz.auriium.branch.interfacing.information.description.Description; +import xyz.auriium.branch.interfacing.information.description.StringDescription; + +public class SingleNode extends AbstractSingleNode { + + private final Block identifier; + private final Permission permission; + private final Description description; + private final ExecutionHandler handler; + + public SingleNode(Block identifier, Permission permission, Description description, ExecutionHandler handler) { + this.identifier = identifier; + this.permission = permission; + this.description = description; + this.handler = handler; + } + + @Override + public Permission getPermission() { + return permission; + } + + @Override + public Description getDescription() { + return description; + } + + @Override + public Block getIdentifier() { + return identifier; + } + + @Override + protected ExecutionHandler getHandler() { + return handler; + } + + public static SingleNode of(Block id, ExecutionHandler handler, Permission permission, Description description) { + return new SingleNode(id,permission,description,handler); + } + + public static SingleNode of(Block id, ExecutionHandler handler) { + return new SingleNode(id,new EmptyPermission<>(),new StringDescription("default description"),handler); + } + +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/single/SingleNodeBuilder.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/single/SingleNodeBuilder.java new file mode 100644 index 0000000..bbad8ca --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/single/SingleNodeBuilder.java @@ -0,0 +1,52 @@ +package xyz.auriium.branch.nodes.single; + +import xyz.auriium.branch.execution.Block; +import xyz.auriium.branch.execution.api.ExecutionHandler; +import xyz.auriium.branch.fallback.permissions.EmptyPermission; +import xyz.auriium.branch.fallback.permissions.Permission; +import xyz.auriium.branch.interfacing.information.description.Description; +import xyz.auriium.branch.interfacing.information.description.StringDescription; + +import java.util.Objects; + +public final class SingleNodeBuilder { + + + private final Block identifier; + private Permission permission; + private Description description; + private ExecutionHandler handler; + + SingleNodeBuilder(Block identifier) { + this.identifier = identifier; + } + + public static SingleNodeBuilder builder(Block identifier) { + return new SingleNodeBuilder<>(identifier); + } + + public SingleNodeBuilder withPermission(Permission permission) { + this.permission = permission; + return this; + } + + public SingleNodeBuilder withDescription(Description description) { + this.description = description; + return this; + } + + public SingleNodeBuilder withHandler(ExecutionHandler handler) { + this.handler = handler; + return this; + } + + public SingleNode build() { + + return new SingleNode( + identifier, + Objects.requireNonNullElse(permission, new EmptyPermission<>()), + Objects.requireNonNullElse(description, new StringDescription("Default description")), + handler + ); + } +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/single/implement/DefaultingSingleNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/single/implement/DefaultingSingleNode.java new file mode 100644 index 0000000..c16d023 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/single/implement/DefaultingSingleNode.java @@ -0,0 +1,22 @@ +package xyz.auriium.branch.nodes.single.implement; + +import xyz.auriium.branch.execution.Block; +import xyz.auriium.branch.execution.StringBlock; +import xyz.auriium.branch.fallback.permissions.EmptyPermission; +import xyz.auriium.branch.fallback.permissions.Permission; +import xyz.auriium.branch.nodes.single.implement.ImplementableSingleNode; + +public abstract class DefaultingSingleNode extends ImplementableSingleNode { + + @Override + public Permission getPermission() { + return new EmptyPermission<>(); + } + + @Override + public Block getIdentifier() { + return StringBlock.of(getName()); + } + + abstract String getName(); +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/single/implement/ImplementableSingleNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/single/implement/ImplementableSingleNode.java new file mode 100644 index 0000000..62bbee4 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/single/implement/ImplementableSingleNode.java @@ -0,0 +1,17 @@ +package xyz.auriium.branch.nodes.single.implement; + +import xyz.auriium.branch.execution.NodeContext; +import xyz.auriium.branch.execution.api.ExecutionHandler; +import xyz.auriium.branch.nodes.single.AbstractSingleNode; + +public abstract class ImplementableSingleNode extends AbstractSingleNode { + + protected ExecutionHandler getHandler() { + return this::onExecution; + } + + abstract void onExecution(NodeContext context); + + + +} diff --git a/branch-core/src/test/java/ExecutionTest.java b/branch-core/src/test/java/ExecutionTest.java new file mode 100644 index 0000000..ba11564 --- /dev/null +++ b/branch-core/src/test/java/ExecutionTest.java @@ -0,0 +1,67 @@ +/* + * + * Branch + * Copyright © 2021 Aurium + * + * Branch is free software: you can redistribute it and/or modify + * It under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * Branch is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Branch. If not, see + * and navigate to version 3 of the GNU Affero General Public License. + * + */ + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import xyz.auriium.branch.centralized.NodeSource; +import xyz.auriium.branch.execution.StringBlock; +import xyz.auriium.branch.fallback.permissions.EmptyPermission; +import xyz.auriium.branch.interfacing.information.description.StringDescription; +import xyz.auriium.branch.nodes.IdentifiableNode; +import xyz.auriium.branch.nodes.single.SingleNode; +import xyz.auriium.branch.tests.StringManager; + +public class ExecutionTest { + + private final static Logger logger = LoggerFactory.getLogger(ExecutionTest.class); + + private final StringManager manager = new StringManager(); + private final NodeSource source = manager.getSource(); + + public void test1() { + + manager.newCommandWithBuilder() + .withNode(source.single() + .withHandler(context -> { + + }).build() + ).finish(); + + manager.newCommandWithNode(SingleNode.of(StringBlock.of("test"), act -> { + + },new EmptyPermission<>(), new StringDescription("cum"))); + + manager.newCommandWithNode(SingleNode.of(StringBlock.of("hi"), handler -> { + + })); + + IdentifiableNode cum = SingleNode.of(StringBlock.of("hi"), act -> { + + }); + + manager.newCommandWithBuilder() + .withNode(source.exclusiveBranching().withNode(SingleNode.of(StringBlock.of("hi"), act -> {})).build()); + + //oh my god i can't believe singlenode is actually working + + } + +} diff --git a/core-tests/src/main/java/me/aurium/branch/tests/StringAdapter.java b/branch-core/src/test/java/xyz/auriium/branch/tests/StringAdapter.java similarity index 89% rename from core-tests/src/main/java/me/aurium/branch/tests/StringAdapter.java rename to branch-core/src/test/java/xyz/auriium/branch/tests/StringAdapter.java index 3795f71..6e51118 100644 --- a/core-tests/src/main/java/me/aurium/branch/tests/StringAdapter.java +++ b/branch-core/src/test/java/xyz/auriium/branch/tests/StringAdapter.java @@ -19,9 +19,9 @@ * */ -package me.aurium.branch.tests; +package xyz.auriium.branch.tests; -import me.aurium.branch.centralized.typeadapter.CommonAdapter; +import xyz.auriium.branch.centralized.typeadapter.CommonAdapter; public class StringAdapter implements CommonAdapter { } diff --git a/core-tests/src/main/java/me/aurium/branch/tests/StringManager.java b/branch-core/src/test/java/xyz/auriium/branch/tests/StringManager.java similarity index 64% rename from core-tests/src/main/java/me/aurium/branch/tests/StringManager.java rename to branch-core/src/test/java/xyz/auriium/branch/tests/StringManager.java index 229da42..eca988f 100644 --- a/core-tests/src/main/java/me/aurium/branch/tests/StringManager.java +++ b/branch-core/src/test/java/xyz/auriium/branch/tests/StringManager.java @@ -19,12 +19,15 @@ * */ -package me.aurium.branch.tests; +package xyz.auriium.branch.tests; -import me.aurium.branch.centralized.*; -import me.aurium.branch.centralized.base.NodeBase; -import me.aurium.branch.centralized.base.NodeBaseBuilder; -import me.aurium.branch.centralized.typeadapter.ManagerAdapter; +import xyz.auriium.branch.centralized.base.NodeBase; +import xyz.auriium.branch.centralized.base.NodeBaseBuilder; +import xyz.auriium.branch.centralized.typeadapter.ManagerAdapter; +import xyz.auriium.branch.centralized.CentralizedManager; +import xyz.auriium.branch.centralized.CentralizedManagerBinder; +import xyz.auriium.branch.centralized.NodeSource; +import xyz.auriium.branch.nodes.CommandNode; public class StringManager implements CentralizedManager { @@ -41,17 +44,27 @@ public NodeSource getSource() { } @Override - public NodeBaseBuilder newCommand() { + public NodeBaseBuilder newCommandWithBuilder() { return new NodeBaseBuilder<>(this,defaultAdapter); } @Override - public NodeBaseBuilder newCommand(ManagerAdapter adapter) { + public NodeBaseBuilder newCommandWithBuilder(ManagerAdapter adapter) { return new NodeBaseBuilder<>(this,adapter); } @Override - public void injectCommand(NodeBase base) { + public void newCommandWithNode(CommandNode node) { + + } + + @Override + public void newCommandWithNode(CommandNode node, ManagerAdapter adapter) { + + } + + @Override + public void newCommand(NodeBase base) { throw new IllegalStateException("StringManager is for tests!"); } } diff --git a/branch-spigot-impl/branch-spigot-impl.iml b/branch-spigot-impl/branch-spigot-impl.iml new file mode 100644 index 0000000..0a1c21a --- /dev/null +++ b/branch-spigot-impl/branch-spigot-impl.iml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spigot-impl/pom.xml b/branch-spigot-impl/pom.xml similarity index 100% rename from spigot-impl/pom.xml rename to branch-spigot-impl/pom.xml diff --git a/spigot-impl/src/main/java/me/aurium/branch/spigot/CommandWrapper.java b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/CommandWrapper.java similarity index 94% rename from spigot-impl/src/main/java/me/aurium/branch/spigot/CommandWrapper.java rename to branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/CommandWrapper.java index 8b47ef6..964e53b 100644 --- a/spigot-impl/src/main/java/me/aurium/branch/spigot/CommandWrapper.java +++ b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/CommandWrapper.java @@ -19,9 +19,9 @@ * */ -package me.aurium.branch.spigot; +package xyz.auriium.branch.spigot; -import me.aurium.branch.centralized.base.NodeBase; +import xyz.auriium.branch.centralized.base.NodeBase; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; diff --git a/spigot-impl/src/main/java/me/aurium/branch/spigot/SpigotContext.java b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotContext.java similarity index 78% rename from spigot-impl/src/main/java/me/aurium/branch/spigot/SpigotContext.java rename to branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotContext.java index b1eb1c2..1ff9472 100644 --- a/spigot-impl/src/main/java/me/aurium/branch/spigot/SpigotContext.java +++ b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotContext.java @@ -19,14 +19,14 @@ * */ -package me.aurium.branch.spigot; +package xyz.auriium.branch.spigot; -import me.aurium.branch.execution.AbstractNodeContext; -import me.aurium.branch.interfacing.handlers.InterfacingHandler; -import me.aurium.branch.interfacing.Response; -import me.aurium.branch.nodes.CommandNode; -import me.aurium.branch.nodes.results.SearchInfo; +import xyz.auriium.branch.execution.AbstractNodeContext; +import xyz.auriium.branch.interfacing.handlers.InterfacingHandler; +import xyz.auriium.branch.interfacing.Response; +import xyz.auriium.branch.nodes.CommandNode; +import xyz.auriium.branch.nodes.results.SearchInfo; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; @@ -51,4 +51,9 @@ public void stringSender(String string) { public void response(Response failure) { handler.sendMessage(sender,failure); } + + @Override + public boolean hasStringPermissible(String string) { + return sender.hasPermission(string); + } } diff --git a/spigot-impl/src/main/java/me/aurium/branch/spigot/SpigotContextProvider.java b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotContextProvider.java similarity index 81% rename from spigot-impl/src/main/java/me/aurium/branch/spigot/SpigotContextProvider.java rename to branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotContextProvider.java index 6080886..e4c0c2c 100644 --- a/spigot-impl/src/main/java/me/aurium/branch/spigot/SpigotContextProvider.java +++ b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotContextProvider.java @@ -19,14 +19,14 @@ * */ -package me.aurium.branch.spigot; +package xyz.auriium.branch.spigot; -import me.aurium.branch.execution.ContextProvider; -import me.aurium.branch.execution.NodeContext; -import me.aurium.branch.interfacing.handlers.InterfacingHandler; -import me.aurium.branch.nodes.CommandNode; -import me.aurium.branch.nodes.results.SearchInfo; +import xyz.auriium.branch.execution.ContextProvider; +import xyz.auriium.branch.execution.NodeContext; +import xyz.auriium.branch.interfacing.handlers.InterfacingHandler; +import xyz.auriium.branch.nodes.CommandNode; +import xyz.auriium.branch.nodes.results.SearchInfo; import org.bukkit.command.CommandSender; public class SpigotContextProvider implements ContextProvider { diff --git a/spigot-impl/src/main/java/me/aurium/branch/spigot/SpigotManager.java b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotManager.java similarity index 67% rename from spigot-impl/src/main/java/me/aurium/branch/spigot/SpigotManager.java rename to branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotManager.java index 1540d98..d982775 100644 --- a/spigot-impl/src/main/java/me/aurium/branch/spigot/SpigotManager.java +++ b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotManager.java @@ -19,19 +19,20 @@ * */ -package me.aurium.branch.spigot; - -import me.aurium.branch.centralized.CentralizedManager; -import me.aurium.branch.centralized.CentralizedManagerBinder; -import me.aurium.branch.centralized.NodeSource; -import me.aurium.branch.centralized.base.NodeBase; -import me.aurium.branch.centralized.typeadapter.ManagerAdapter; -import me.aurium.branch.centralized.base.NodeBaseBuilder; -import me.aurium.branch.fallback.strategies.OneBackStrategy; -import me.aurium.branch.interfacing.handlers.InterfacingHandler; -import me.aurium.branch.interfacing.handlers.MessageMap; -import me.aurium.branch.spigot.adapter.SenderAdapter; -import me.aurium.branch.spigot.message.SpigotMessageMap; +package xyz.auriium.branch.spigot; + +import xyz.auriium.branch.centralized.CentralizedManager; +import xyz.auriium.branch.centralized.CentralizedManagerBinder; +import xyz.auriium.branch.centralized.NodeSource; +import xyz.auriium.branch.centralized.base.NodeBase; +import xyz.auriium.branch.centralized.typeadapter.ManagerAdapter; +import xyz.auriium.branch.centralized.base.NodeBaseBuilder; +import xyz.auriium.branch.fallback.strategies.OneBackStrategy; +import xyz.auriium.branch.interfacing.handlers.InterfacingHandler; +import xyz.auriium.branch.interfacing.handlers.MessageMap; +import xyz.auriium.branch.nodes.CommandNode; +import xyz.auriium.branch.spigot.adapter.SenderAdapter; +import xyz.auriium.branch.spigot.message.SpigotMessageMap; import org.bukkit.command.CommandSender; import org.bukkit.plugin.java.JavaPlugin; @@ -67,17 +68,27 @@ public NodeSource getSource() { } @Override - public NodeBaseBuilder newCommand() { + public NodeBaseBuilder newCommandWithBuilder() { return new NodeBaseBuilder<>(this, defaultAdapter, new OneBackStrategy<>(), new SpigotContextProvider<>(defaultInterfacing), defaultInterfacing); } @Override - public NodeBaseBuilder newCommand(ManagerAdapter adapter) { + public NodeBaseBuilder newCommandWithBuilder(ManagerAdapter adapter) { return new NodeBaseBuilder<>(this,adapter, new OneBackStrategy<>(), new SpigotContextProvider<>(defaultInterfacing), defaultInterfacing); } @Override - public void injectCommand(NodeBase base) { + public void newCommandWithNode(CommandNode node) { + + } + + @Override + public void newCommandWithNode(CommandNode node, ManagerAdapter adapter) { + + } + + @Override + public void newCommand(NodeBase base) { senders.add(base); } diff --git a/spigot-impl/src/main/java/me/aurium/branch/spigot/SpigotManagerBinder.java b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotManagerBinder.java similarity index 90% rename from spigot-impl/src/main/java/me/aurium/branch/spigot/SpigotManagerBinder.java rename to branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotManagerBinder.java index 0b69afb..b17d184 100644 --- a/spigot-impl/src/main/java/me/aurium/branch/spigot/SpigotManagerBinder.java +++ b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotManagerBinder.java @@ -19,10 +19,10 @@ * */ -package me.aurium.branch.spigot; +package xyz.auriium.branch.spigot; -import me.aurium.branch.centralized.CentralizedManagerBinder; -import me.aurium.branch.centralized.base.NodeBase; +import xyz.auriium.branch.centralized.CentralizedManagerBinder; +import xyz.auriium.branch.centralized.base.NodeBase; import org.bukkit.command.CommandMap; import org.bukkit.command.CommandSender; diff --git a/spigot-impl/src/main/java/me/aurium/branch/spigot/adapter/PlayerAdapter.java b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/adapter/PlayerAdapter.java similarity index 88% rename from spigot-impl/src/main/java/me/aurium/branch/spigot/adapter/PlayerAdapter.java rename to branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/adapter/PlayerAdapter.java index ce98e38..81d07bf 100644 --- a/spigot-impl/src/main/java/me/aurium/branch/spigot/adapter/PlayerAdapter.java +++ b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/adapter/PlayerAdapter.java @@ -19,10 +19,10 @@ * */ -package me.aurium.branch.spigot.adapter; +package xyz.auriium.branch.spigot.adapter; -import me.aurium.branch.interfacing.responses.FailedAdaptingResponse; -import me.aurium.branch.centralized.typeadapter.ManagerAdapter; +import xyz.auriium.branch.interfacing.responses.FailedAdaptingResponse; +import xyz.auriium.branch.centralized.typeadapter.ManagerAdapter; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; diff --git a/spigot-impl/src/main/java/me/aurium/branch/spigot/adapter/SenderAdapter.java b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/adapter/SenderAdapter.java similarity index 89% rename from spigot-impl/src/main/java/me/aurium/branch/spigot/adapter/SenderAdapter.java rename to branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/adapter/SenderAdapter.java index aeb67fd..7a5daae 100644 --- a/spigot-impl/src/main/java/me/aurium/branch/spigot/adapter/SenderAdapter.java +++ b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/adapter/SenderAdapter.java @@ -19,9 +19,9 @@ * */ -package me.aurium.branch.spigot.adapter; +package xyz.auriium.branch.spigot.adapter; -import me.aurium.branch.centralized.typeadapter.CommonAdapter; +import xyz.auriium.branch.centralized.typeadapter.CommonAdapter; import org.bukkit.command.CommandSender; public class SenderAdapter implements CommonAdapter { diff --git a/spigot-impl/src/main/java/me/aurium/branch/spigot/message/FormattedMessage.java b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/message/FormattedMessage.java similarity index 92% rename from spigot-impl/src/main/java/me/aurium/branch/spigot/message/FormattedMessage.java rename to branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/message/FormattedMessage.java index fad79d9..cc2385f 100644 --- a/spigot-impl/src/main/java/me/aurium/branch/spigot/message/FormattedMessage.java +++ b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/message/FormattedMessage.java @@ -19,9 +19,9 @@ * */ -package me.aurium.branch.spigot.message; +package xyz.auriium.branch.spigot.message; -import me.aurium.branch.interfacing.Message; +import xyz.auriium.branch.interfacing.Message; import org.bukkit.command.CommandSender; public abstract class FormattedMessage implements Message { diff --git a/spigot-impl/src/main/java/me/aurium/branch/spigot/message/SpigotMessageMap.java b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/message/SpigotMessageMap.java similarity index 81% rename from spigot-impl/src/main/java/me/aurium/branch/spigot/message/SpigotMessageMap.java rename to branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/message/SpigotMessageMap.java index bff08f2..81aa22c 100644 --- a/spigot-impl/src/main/java/me/aurium/branch/spigot/message/SpigotMessageMap.java +++ b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/message/SpigotMessageMap.java @@ -19,13 +19,13 @@ * */ -package me.aurium.branch.spigot.message; +package xyz.auriium.branch.spigot.message; -import me.aurium.branch.interfacing.Response; -import me.aurium.branch.interfacing.ResponseAction; -import me.aurium.branch.interfacing.handlers.DelegatingDefaultMap; -import me.aurium.branch.interfacing.handlers.InnerMap; -import me.aurium.branch.interfacing.responses.FailedAdaptingResponse; +import xyz.auriium.branch.interfacing.Response; +import xyz.auriium.branch.interfacing.ResponseAction; +import xyz.auriium.branch.interfacing.handlers.DelegatingDefaultMap; +import xyz.auriium.branch.interfacing.handlers.InnerMap; +import xyz.auriium.branch.interfacing.responses.FailedAdaptingResponse; import org.bukkit.command.CommandSender; /** diff --git a/spigot-impl/src/main/java/me/aurium/branch/spigot/message/TextMessage.java b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/message/TextMessage.java similarity index 93% rename from spigot-impl/src/main/java/me/aurium/branch/spigot/message/TextMessage.java rename to branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/message/TextMessage.java index 846e202..c5bcf7d 100644 --- a/spigot-impl/src/main/java/me/aurium/branch/spigot/message/TextMessage.java +++ b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/message/TextMessage.java @@ -19,9 +19,9 @@ * */ -package me.aurium.branch.spigot.message; +package xyz.auriium.branch.spigot.message; -import me.aurium.branch.interfacing.Message; +import xyz.auriium.branch.interfacing.Message; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; diff --git a/spigot-impl/src/main/java/me/aurium/branch/spigot/permisison/SpigotPermission.java b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/permisison/SpigotPermission.java similarity index 82% rename from spigot-impl/src/main/java/me/aurium/branch/spigot/permisison/SpigotPermission.java rename to branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/permisison/SpigotPermission.java index e23d7b4..58ec4f4 100644 --- a/spigot-impl/src/main/java/me/aurium/branch/spigot/permisison/SpigotPermission.java +++ b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/permisison/SpigotPermission.java @@ -1,6 +1,6 @@ -package me.aurium.branch.spigot.permisison; +package xyz.auriium.branch.spigot.permisison; -import me.aurium.branch.fallback.permissions.Permission; +import xyz.auriium.branch.fallback.permissions.Permission; import org.bukkit.command.CommandSender; public class SpigotPermission implements Permission { diff --git a/spigot-impl/src/test/java/me/aurium/beetle/KitpvpCommand.java b/branch-spigot-impl/src/test/java/me/aurium/beetle/KitpvpCommand.java similarity index 100% rename from spigot-impl/src/test/java/me/aurium/beetle/KitpvpCommand.java rename to branch-spigot-impl/src/test/java/me/aurium/beetle/KitpvpCommand.java diff --git a/spigot-impl/src/test/java/me/aurium/branch/spigot/ExampleBinding.java b/branch-spigot-impl/src/test/java/xyz/auriium/branch/spigot/ExampleBinding.java similarity index 96% rename from spigot-impl/src/test/java/me/aurium/branch/spigot/ExampleBinding.java rename to branch-spigot-impl/src/test/java/xyz/auriium/branch/spigot/ExampleBinding.java index 5f755a6..151e4f4 100644 --- a/spigot-impl/src/test/java/me/aurium/branch/spigot/ExampleBinding.java +++ b/branch-spigot-impl/src/test/java/xyz/auriium/branch/spigot/ExampleBinding.java @@ -19,7 +19,7 @@ * */ -package me.aurium.branch.spigot; +package xyz.auriium.branch.spigot; import org.bukkit.plugin.java.JavaPlugin; diff --git a/spigot-impl/src/test/resources/plugin.yml b/branch-spigot-impl/src/test/resources/plugin.yml similarity index 100% rename from spigot-impl/src/test/resources/plugin.yml rename to branch-spigot-impl/src/test/resources/plugin.yml diff --git a/core-tests/core-tests.iml b/core-tests/core-tests.iml deleted file mode 100644 index 78b2cc5..0000000 --- a/core-tests/core-tests.iml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/core-tests/pom.xml b/core-tests/pom.xml deleted file mode 100644 index 09d482d..0000000 --- a/core-tests/pom.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - - - 4.0.0 - - - branch - xyz.auriium - 0.1.0 - - - branch-core-tests - 0.1.0 - - - ${compiler.version} - ${compiler.version} - - - - - branch-core - xyz.auriium - 0.1.0 - - - org.junit.jupiter - junit-jupiter-engine - 5.7.0 - test - - - org.slf4j - slf4j-api - 2.0.0-alpha1 - test - - - ch.qos.logback - logback-core - 1.3.0-alpha5 - test - - - ch.qos.logback - logback-classic - 1.2.3 - test - - - - - \ No newline at end of file diff --git a/core-tests/src/test/java/me/aurium/branch/ExecutionTest.java b/core-tests/src/test/java/me/aurium/branch/ExecutionTest.java deleted file mode 100644 index 5ebc147..0000000 --- a/core-tests/src/test/java/me/aurium/branch/ExecutionTest.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * - * Branch - * Copyright © 2021 Aurium - * - * Branch is free software: you can redistribute it and/or modify - * It under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * Branch is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Branch. If not, see - * and navigate to version 3 of the GNU Affero General Public License. - * - */ - -package me.aurium.branch; - -import me.aurium.branch.tests.StringManager; -import org.junit.platform.commons.logging.Logger; -import org.junit.platform.commons.logging.LoggerFactory; - -public class ExecutionTest { - - private final static Logger logger = LoggerFactory.getLogger(ExecutionTest.class); - - private final StringManager manager = new StringManager(); - -} diff --git a/core/src/main/java/me/aurium/branch/centralized/NodeSource.java b/core/src/main/java/me/aurium/branch/centralized/NodeSource.java deleted file mode 100644 index e7867be..0000000 --- a/core/src/main/java/me/aurium/branch/centralized/NodeSource.java +++ /dev/null @@ -1,14 +0,0 @@ -package me.aurium.branch.centralized; - -import me.aurium.branch.nodes.branching.ExclusiveBranchingBuilder; -import me.aurium.branch.nodes.branching.InclusiveBranchingBuilder; -import me.aurium.branch.nodes.single.SingleBuilder; - -public interface NodeSource { - - SingleBuilder single(); - InclusiveBranchingBuilder inclusiveBranching(); - ExclusiveBranchingBuilder exclusiveBranching(); - //TODO help and argument - -} diff --git a/core/src/main/java/me/aurium/branch/centralized/base/AdaptingNodeBase.java b/core/src/main/java/me/aurium/branch/centralized/base/AdaptingNodeBase.java deleted file mode 100644 index 4f0e0c9..0000000 --- a/core/src/main/java/me/aurium/branch/centralized/base/AdaptingNodeBase.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * - * Branch - * Copyright © 2021 Aurium - * - * Branch is free software: you can redistribute it and/or modify - * It under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * Branch is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Branch. If not, see - * and navigate to version 3 of the GNU Affero General Public License. - * - */ - -package me.aurium.branch.centralized.base; - -import me.aurium.branch.centralized.typeadapter.ManagerAdapter; -import me.aurium.branch.execution.api.Execution; -import me.aurium.branch.execution.ContextProvider; -import me.aurium.branch.execution.NodeContext; -import me.aurium.branch.fallback.strategies.FallbackSearchStrategy; -import me.aurium.branch.information.description.Description; -import me.aurium.branch.interfacing.handlers.InterfacingHandler; -import me.aurium.branch.nodes.CommandNode; -import me.aurium.branch.nodes.results.SearchInfo; -import me.aurium.branch.nodes.results.model.Result; - -import java.util.List; - -/** - * Represents a node base that has the ability to convert it's input sender to a sender of type C or fail with a result. - * @param the input type of nodebase - * @param the adapted adjusted type desired, based on a similar adapter. - */ -public abstract class AdaptingNodeBase implements NodeBase { - - private final ManagerAdapter adapter; - - private final CommandNode baseNode; - private final FallbackSearchStrategy strategy; - private final ContextProvider provider; - private final InterfacingHandler handler; - - public AdaptingNodeBase(ManagerAdapter adapter, CommandNode baseNode, FallbackSearchStrategy strategy, ContextProvider provider, InterfacingHandler handler) { - this.adapter = adapter; - this.baseNode = baseNode; - this.strategy = strategy; - this.provider = provider; - this.handler = handler; - } - - public void execute(T t, String alias, String[] args) { - if (!adapter.canAdapt(t)) { - handler.sendMessage(t,adapter.failedParseResponse(t)); - return; - } - - C adaptedSender = adapter.adapt(t); - - Result> result = strategy.attemptPreprocess(adaptedSender,alias,args,baseNode); - - if (!result.isSuccessful()) { - handler.sendMessage(t, result.getFailure()); - return; - } - - SearchInfo info = result.getSuccess(); - NodeContext produced = provider.produce(adaptedSender,alias,args,baseNode,info); - - Execution execution = info.resultingNode().getHandling().getExecution(produced); - - execution.run(); - } - - public List suggest(T t, String alias, String[] args) { - return null; //TODO - } - -} diff --git a/core/src/main/java/me/aurium/branch/centralized/base/DelegatingNodeBase.java b/core/src/main/java/me/aurium/branch/centralized/base/DelegatingNodeBase.java deleted file mode 100644 index cddf7e0..0000000 --- a/core/src/main/java/me/aurium/branch/centralized/base/DelegatingNodeBase.java +++ /dev/null @@ -1,35 +0,0 @@ -package me.aurium.branch.centralized.base; - -import me.aurium.branch.centralized.typeadapter.ManagerAdapter; -import me.aurium.branch.execution.ContextProvider; -import me.aurium.branch.fallback.strategies.FallbackSearchStrategy; -import me.aurium.branch.information.description.Description; -import me.aurium.branch.interfacing.handlers.InterfacingHandler; -import me.aurium.branch.nodes.CommandNode; -import me.aurium.branch.nodes.IdentifiableNode; - -/** - * Adapting node base that delegates identifier calls to the first node in the base stack. - * @param t - * @param c - */ -public class DelegatingNodeBase extends AdaptingNodeBase { - - private final IdentifiableNode baseNode; - - public DelegatingNodeBase(ManagerAdapter adapter, IdentifiableNode baseNode, FallbackSearchStrategy strategy, ContextProvider provider, InterfacingHandler handler) { - super(adapter, baseNode, strategy, provider, handler); - - this.baseNode = baseNode; - } - - @Override - public Description getDescription() { - return baseNode.getDescription(); - } - - @Override - public String getIdentifier() { - return baseNode.getIdentifier().getIdentifier(); - } -} diff --git a/core/src/main/java/me/aurium/branch/centralized/base/NodeBase.java b/core/src/main/java/me/aurium/branch/centralized/base/NodeBase.java deleted file mode 100644 index 4323616..0000000 --- a/core/src/main/java/me/aurium/branch/centralized/base/NodeBase.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * - * Branch - * Copyright © 2021 Aurium - * - * Branch is free software: you can redistribute it and/or modify - * It under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * Branch is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Branch. If not, see - * and navigate to version 3 of the GNU Affero General Public License. - * - */ - -package me.aurium.branch.centralized.base; - -import me.aurium.branch.information.description.Description; - -import java.util.Collections; -import java.util.List; - -/** - * Represents a single command tree as a command - * @param type of input sender - */ -public interface NodeBase { - - void execute(T t, String alias, String[] args); //may execute instantly or take some time - List suggest(T t, String alias, String[] args); - - Description getDescription(); - String getIdentifier(); - - default List getAliases() { - return Collections.emptyList(); - } - -} diff --git a/core/src/main/java/me/aurium/branch/execution/api/Execution.java b/core/src/main/java/me/aurium/branch/execution/api/Execution.java deleted file mode 100644 index 5ec4c5f..0000000 --- a/core/src/main/java/me/aurium/branch/execution/api/Execution.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * - * Branch - * Copyright © 2021 Aurium - * - * Branch is free software: you can redistribute it and/or modify - * It under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * Branch is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Branch. If not, see - * and navigate to version 3 of the GNU Affero General Public License. - * - */ - -package me.aurium.branch.execution.api; - -import me.aurium.branch.execution.NodeContext; - -/** - * Standin class for something more sophisticated - basically allows the controlled execution of the node to be submitted as a runnable - * @param the type - */ -public class Execution implements Runnable { - - private final ExecutionHandler handler; - private final NodeContext node; - - public Execution(ExecutionHandler handler, NodeContext node) { - this.handler = handler; - this.node = node; - } - - @Override - public void run() { - handler.handle(node); - } -} diff --git a/core/src/main/java/me/aurium/branch/nodes/argument/ArgNode.java b/core/src/main/java/me/aurium/branch/nodes/argument/ArgNode.java deleted file mode 100644 index 24b2cdd..0000000 --- a/core/src/main/java/me/aurium/branch/nodes/argument/ArgNode.java +++ /dev/null @@ -1,74 +0,0 @@ -package me.aurium.branch.nodes.argument; - -import me.aurium.branch.execution.Block; -import me.aurium.branch.execution.NodeContext; -import me.aurium.branch.execution.api.BranchHandler; -import me.aurium.branch.execution.api.Execution; -import me.aurium.branch.fallback.permissions.Permission; -import me.aurium.branch.information.description.Description; -import me.aurium.branch.nodes.argument.types.Argument; -import me.aurium.branch.nodes.results.model.Result; -import me.aurium.branch.nodes.single.EndpointNode; - -import java.util.ArrayDeque; -import java.util.Deque; -import java.util.List; - -public class ArgNode extends EndpointNode { - - private final Block identifier; - private final Permission permission; - private final Description description; - private final List> arguments; - - public ArgNode(Block identifier, Permission permission, Description description, List> arguments) { - this.identifier = identifier; - this.permission = permission; - this.description = description; - this.arguments = arguments; - } - - @Override - public BranchHandler getHandling() { - return null; - } - - @Override - public Permission getPermission() { - return permission; - } - - @Override - public Description getDescription() { - return description; - } - - @Override - public Block getIdentifier() { - return identifier; - } - - public static final class ArgHandler implements BranchHandler { - - private final List> arguments; - - public ArgHandler(List> arguments) { - this.arguments = arguments; - } - - @Override - public Execution getExecution(NodeContext context) { - - Deque subdeque = new ArrayDeque<>(context.getResults().reducedPath()); - - - - return null; - } - - @Override - public List getSuggestions(NodeContext context) { - return null; - } - } -} diff --git a/core/src/main/java/me/aurium/branch/nodes/argument/ArgumentConverter.java b/core/src/main/java/me/aurium/branch/nodes/argument/ArgumentConverter.java deleted file mode 100644 index 0c944e6..0000000 --- a/core/src/main/java/me/aurium/branch/nodes/argument/ArgumentConverter.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * - * Branch - * Copyright © 2021 Aurium - * - * Branch is free software: you can redistribute it and/or modify - * It under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * Branch is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Branch. If not, see - * and navigate to version 3 of the GNU Affero General Public License. - * - */ - -package me.aurium.branch.nodes.argument; - -public interface ArgumentConverter { -} diff --git a/core/src/main/java/me/aurium/branch/nodes/argument/ArgumentNode.java b/core/src/main/java/me/aurium/branch/nodes/argument/ArgumentNode.java deleted file mode 100644 index 290b736..0000000 --- a/core/src/main/java/me/aurium/branch/nodes/argument/ArgumentNode.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * - * Branch - * Copyright © 2021 Aurium - * - * Branch is free software: you can redistribute it and/or modify - * It under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * Branch is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Branch. If not, see - * and navigate to version 3 of the GNU Affero General Public License. - * - */ - -package me.aurium.branch.nodes.argument; - -//kinda like a branching node except it throws forward and not to the sides - -//one of these days ill actually finish this class LMFAO -/* -public class ArgumentNode implements IdentifiableNode { - - private final Block identifier; - private final List> sequentialValueNodes; //the nodes in order from here on out - private final SingleNode noArgs; - - private final Permission permission; - - public ArgumentNode(Block identifier, List> sequentialValueNodes, SingleNode noArgs, Permission permission) { - this.identifier = identifier; - this.sequentialValueNodes = sequentialValueNodes; - this.noArgs = noArgs; - this.permission = permission; - } - - - // - These two methods can remain unimplemented because this node will never be used for contexthandlers and suggestionhandlers - - // - The actual contextHandler and Suggestionhandler are provided by the getSpecificNode method returning an anonymous basenode - - // - This is because the contexthandler and suggestion handler here always depend on the blockpath, and in order to respect - - // - the node map object model, we must do this. - - - @Override - public SearchResult getSpecificNode(SearchInput input) { - return new SearchResult<>(this, input); - } - - */ -/*if (path.isEmpty()) return Optional.of(noArgs); - - return Optional.of(this);*//* - - - */ -/* This was pointless, see below note - - //we can either do this shit, or we can return **THIS** no matter what and let the context handler be variable, since the context handler delegates - //to another adapter anyways - - int position = path.length() - 1; //wow real throwback to LEAF framework huh - int size = sequentialValueNodes.size(); - - //check the length - if (position == size) return Optional.of(sequentialValueNodes.get(size - 1)); - - return Optional.of(sequentialValueNodes.get(position)); - *//* - - - @Override - public ExecutionResult getExecutionHandler() { - return new ExecutionResult<>((context) -> { - Deque executed = context.executedPath(); - }); - } - - @Override - public SuggestionHandler getSuggestionHandler() { - return (context) -> { - return null; - }; - } - - @Override - public Permission getPermission() { - return permission; - } - - @Override - public Block getIdentifier() { - return identifier; - } -} -*/ diff --git a/core/src/main/java/me/aurium/branch/nodes/argument/types/AbstractArgument.java b/core/src/main/java/me/aurium/branch/nodes/argument/types/AbstractArgument.java deleted file mode 100644 index b48f087..0000000 --- a/core/src/main/java/me/aurium/branch/nodes/argument/types/AbstractArgument.java +++ /dev/null @@ -1,16 +0,0 @@ -package me.aurium.branch.nodes.argument.types; - -public abstract class AbstractArgument implements Argument { - - protected final String label; - - public AbstractArgument(String label) { - this.label = label; - } - - @Override - public String getLabel() { - return label; - } - -} diff --git a/core/src/main/java/me/aurium/branch/nodes/argument/types/Argument.java b/core/src/main/java/me/aurium/branch/nodes/argument/types/Argument.java deleted file mode 100644 index a8dd5f1..0000000 --- a/core/src/main/java/me/aurium/branch/nodes/argument/types/Argument.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * - * Branch - * Copyright © 2021 Aurium - * - * Branch is free software: you can redistribute it and/or modify - * It under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * Branch is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Branch. If not, see - * and navigate to version 3 of the GNU Affero General Public License. - * - */ - -package me.aurium.branch.nodes.argument.types; - -import me.aurium.branch.execution.Block; -import me.aurium.branch.execution.NodeContext; -import me.aurium.branch.nodes.results.model.Result; - -import java.util.List; -import java.util.Optional; - -/** - * Represents a kind of parser that converts blocks into a typed argument. - * @param - * - * TODO: maybe let arguments consume more than one Block. - */ -public interface Argument { - - /** - * What the argument identifies as - * @return what it identifies as - */ - String getLabel(); - - /** - * Gets the bounds of the object - * @param context the context used to calculate - * @return - */ - List getBounds(NodeContext context); - - /** - * Attempts to parse the value - * @param context the targeted context - * @return the result if present or a failure if not. - */ - Result parse(NodeContext context); - - /** - * Returns the default value of the argument if it is present. If it is not present the argument is not optional. - * @return the presence of the argument value - */ - Optional getDefault(); - -} diff --git a/core/src/main/java/me/aurium/branch/nodes/argument/types/StringArgument.java b/core/src/main/java/me/aurium/branch/nodes/argument/types/StringArgument.java deleted file mode 100644 index acdbb51..0000000 --- a/core/src/main/java/me/aurium/branch/nodes/argument/types/StringArgument.java +++ /dev/null @@ -1,30 +0,0 @@ -package me.aurium.branch.nodes.argument.types; - -import me.aurium.branch.execution.Block; -import me.aurium.branch.execution.NodeContext; -import me.aurium.branch.nodes.results.model.Result; - -import java.util.List; -import java.util.Optional; - -public class StringArgument extends AbstractArgument { - - public StringArgument(String label) { - super(label); - } - - @Override - public List getBounds(NodeContext context) { - return null; - } - - @Override - public Result parse(NodeContext context) { - return null; - } - - @Override - public Optional getDefault() { - return Optional.empty(); - } -} diff --git a/core/src/main/java/me/aurium/branch/nodes/single/HelpNode.java b/core/src/main/java/me/aurium/branch/nodes/single/HelpNode.java deleted file mode 100644 index 0b402b0..0000000 --- a/core/src/main/java/me/aurium/branch/nodes/single/HelpNode.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * - * Branch - * Copyright © 2021 Aurium - * - * Branch is free software: you can redistribute it and/or modify - * It under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * Branch is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Branch. If not, see - * and navigate to version 3 of the GNU Affero General Public License. - * - */ - -package me.aurium.branch.nodes.single; - -import me.aurium.branch.execution.Block; -import me.aurium.branch.execution.api.BranchHandler; -import me.aurium.branch.fallback.permissions.Permission; -import me.aurium.branch.information.description.Description; -import me.aurium.branch.nodes.single.EndpointNode; - -/** - * Represents a node that pregenerates help entries based on the message context - */ -public class HelpNode extends EndpointNode { - - @Override - public BranchHandler getHandling() { - return null; - } - - @Override - public Permission getPermission() { - return null; - } - - @Override - public Block getIdentifier() { - return null; - } - - @Override - public Description getDescription() { - return null; - } -} diff --git a/core/src/main/java/me/aurium/branch/nodes/single/SingleBuilder.java b/core/src/main/java/me/aurium/branch/nodes/single/SingleBuilder.java deleted file mode 100644 index 1f8af5b..0000000 --- a/core/src/main/java/me/aurium/branch/nodes/single/SingleBuilder.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * - * Branch - * Copyright © 2021 Aurium - * - * Branch is free software: you can redistribute it and/or modify - * It under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * Branch is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Branch. If not, see - * and navigate to version 3 of the GNU Affero General Public License. - * - */ - -package me.aurium.branch.nodes.single; - -import me.aurium.branch.execution.Block; -import me.aurium.branch.execution.StringBlock; -import me.aurium.branch.execution.api.ExecutionHandler; -import me.aurium.branch.information.description.Description; -import me.aurium.branch.information.description.StringDescription; -import me.aurium.branch.nodes.Builder; -import me.aurium.branch.nodes.CommandNode; -import me.aurium.branch.fallback.permissions.Permission; -import me.aurium.branch.fallback.permissions.EmptyPermission; - -import java.util.Objects; - -public class SingleBuilder implements Builder { - - private Block block; - private ExecutionHandler contextHandler; - private Permission permission = new EmptyPermission<>(); - private Description description; - - public void withIdentifier(Block identifier) { - this.block = identifier; - } - - public void withIdentifier(String string) { - this.block = StringBlock.of(string); - } - - public void withHandler(ExecutionHandler handler) { - this.contextHandler = handler; - } - - public void withPermission(Permission permission) { - this.permission = permission; - } - - public void withDescription(Description description) { - this.description = description; - } - - public CommandNode build() { - Objects.requireNonNull(block); - Objects.requireNonNull(contextHandler); - - Description returned = Objects.requireNonNullElse(description,new StringDescription("Default description for subcommand " + block.getIdentifier())); - - return new SingleNode<>(block, contextHandler, permission, returned); - } - -} diff --git a/core/src/main/java/me/aurium/branch/nodes/single/SingleNode.java b/core/src/main/java/me/aurium/branch/nodes/single/SingleNode.java deleted file mode 100644 index 67ff1be..0000000 --- a/core/src/main/java/me/aurium/branch/nodes/single/SingleNode.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * - * Branch - * Copyright © 2021 Aurium - * - * Branch is free software: you can redistribute it and/or modify - * It under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * Branch is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Branch. If not, see - * and navigate to version 3 of the GNU Affero General Public License. - * - */ - -package me.aurium.branch.nodes.single; - -import me.aurium.branch.execution.Block; -import me.aurium.branch.execution.api.BranchHandler; -import me.aurium.branch.execution.api.ExecutionHandler; -import me.aurium.branch.execution.api.Execution; -import me.aurium.branch.execution.NodeContext; -import me.aurium.branch.information.description.Description; -import me.aurium.branch.nodes.results.SearchInfo; -import me.aurium.branch.fallback.permissions.Permission; -import me.aurium.branch.nodes.results.model.Result; - -import java.util.ArrayList; -import java.util.List; - -/** - * Represents a node that can do one action and takes no arguments and has no tabcompletion - * @param the type of executor - */ -public class SingleNode extends EndpointNode { - - private final Block identifier; - private final Permission permission; - private final SingleHandler handler; - private final Description description; - - public SingleNode(Block identifier, ExecutionHandler executionHandler, Permission permission, Description description) { - this.identifier = identifier; - - this.handler = new SingleHandler<>(executionHandler); - this.permission = permission; - this.description = description; - } - - @Override - public Block getIdentifier() { - return identifier; - } - - @Override - public Description getDescription() { - return description; - } - - @Override - public BranchHandler getHandling() { - return handler; - } - - @Override - public Permission getPermission() { - return permission; - } - - public static class SingleHandler implements BranchHandler { - - private final ExecutionHandler handler; - - public SingleHandler(ExecutionHandler handler) { - this.handler = handler; - } - - @Override - public Execution getExecution(NodeContext context) { - SearchInfo info = context.getResults(); - - /*if (info.hasMoreArguments()) { - return Result.fail( - new TooManyArgsResponse(0,info.reducedPath().size()) //TODO move this to search details - ); - }*/ - - return new Execution<>(handler,context); - } - - @Override - public List getSuggestions(NodeContext context) { - return new ArrayList<>(); - } - - } - - - -} diff --git a/pom.xml b/pom.xml index 761a796..5ee0bbc 100644 --- a/pom.xml +++ b/pom.xml @@ -42,9 +42,8 @@ - core - core-tests - spigot-impl + branch-core + branch-spigot-impl diff --git a/readme.md b/readme.md index 9ec4aaa..d03732a 100644 --- a/readme.md +++ b/readme.md @@ -6,6 +6,17 @@ Has support for both builder format and annotation format Built for use with Beetle but can be used independently +TODO something something Branch Base lets you write subcommands as if they were individual commands, no complex array/iterator or hard thinking required + +TODO yada yada Branch Base also lets you write commands the way YOU want to, +with formats for all adherents of 3 popular command styles: + +builder with functional interface, +light builder + manually implement any logic-handling node +interface + annotation + +yada yada additionally branch is lightweight where you tell it to be. There is no separate executorservice instantiated purely for a command handling framework. + # How can I ask for support? DM **Aesthetik#9784** on discord! From e3555edd4e9421ea670366443421425a518a89b2 Mon Sep 17 00:00:00 2001 From: Matt Date: Tue, 27 Jul 2021 19:10:03 -0700 Subject: [PATCH 04/10] refactor to anomaly --- .../typeadapter/CommonAdapter.java | 4 +- .../typeadapter/FailedAdaptingAnomaly.java} | 8 ++-- .../typeadapter/ManagerAdapter.java | 4 +- .../auriium/branch/execution/NodeContext.java | 4 +- .../NoPermissionAnomaly.java} | 11 +++-- .../fallback/strategies/OneBackStrategy.java | 4 +- .../strategies/PermissionLockoutStrategy.java | 4 +- .../{Response.java => Anomaly.java} | 2 +- .../branch/interfacing/ResponseAction.java | 2 +- .../handlers/CommonInterfacingHandler.java | 14 +++--- .../handlers/DelegatingDefaultMap.java | 4 +- .../branch/interfacing/handlers/InnerMap.java | 6 +-- .../handlers/InterfacingHandler.java | 4 +- .../interfacing/handlers/MessageMap.java | 4 +- .../responses/NoIntegratedArgsResponse.java | 47 ------------------- .../TooManyArgsAnomaly.java} | 8 ++-- .../branch/nodes/results/SearchInput.java | 2 +- .../nodes/results/model/FailingResult.java | 8 ++-- .../branch/nodes/results/model/Result.java | 6 +-- .../nodes/results/model/SuccessfulResult.java | 4 +- .../auriium/branch/spigot/SpigotContext.java | 4 +- .../branch/spigot/adapter/PlayerAdapter.java | 6 +-- .../spigot/message/SpigotMessageMap.java | 8 ++-- 23 files changed, 60 insertions(+), 108 deletions(-) rename branch-core/src/main/java/xyz/auriium/branch/{interfacing/responses/FailedAdaptingResponse.java => centralized/typeadapter/FailedAdaptingAnomaly.java} (85%) rename branch-core/src/main/java/xyz/auriium/branch/{interfacing/responses/NoPermissionResponse.java => fallback/NoPermissionAnomaly.java} (79%) rename branch-core/src/main/java/xyz/auriium/branch/interfacing/{Response.java => Anomaly.java} (97%) delete mode 100644 branch-core/src/main/java/xyz/auriium/branch/interfacing/responses/NoIntegratedArgsResponse.java rename branch-core/src/main/java/xyz/auriium/branch/{interfacing/responses/TooManyArgsResponse.java => nodes/TooManyArgsAnomaly.java} (83%) diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/CommonAdapter.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/CommonAdapter.java index 13da0fd..e06d70e 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/CommonAdapter.java +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/CommonAdapter.java @@ -21,8 +21,6 @@ package xyz.auriium.branch.centralized.typeadapter; -import xyz.auriium.branch.interfacing.responses.FailedAdaptingResponse; - /** * Represents an adapter that does not convert and simply returns the same object * @param the object type @@ -40,7 +38,7 @@ default boolean canAdapt(T input) { } @Override - default FailedAdaptingResponse failedParseResponse(T input) { + default FailedAdaptingAnomaly failedParseResponse(T input) { throw new IllegalStateException("How did you get here (Since canAdapt is always true this should never occur?)"); } } diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/responses/FailedAdaptingResponse.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/FailedAdaptingAnomaly.java similarity index 85% rename from branch-core/src/main/java/xyz/auriium/branch/interfacing/responses/FailedAdaptingResponse.java rename to branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/FailedAdaptingAnomaly.java index 1c02265..68775cb 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/interfacing/responses/FailedAdaptingResponse.java +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/FailedAdaptingAnomaly.java @@ -19,20 +19,20 @@ * */ -package xyz.auriium.branch.interfacing.responses; +package xyz.auriium.branch.centralized.typeadapter; -import xyz.auriium.branch.interfacing.Response; +import xyz.auriium.branch.interfacing.Anomaly; /** * Represents a response to the scenario in which a certain object was attempted to be adapted to an extending type * but it was not an instance of it (or similar scenarios, such as attempting to flatmap a certain type to another.) */ -public class FailedAdaptingResponse implements Response { +public class FailedAdaptingAnomaly implements Anomaly { private final Class expectedClass; private final Class receivedClass; - public FailedAdaptingResponse(Class expectedClass, Class receivedClass) { + public FailedAdaptingAnomaly(Class expectedClass, Class receivedClass) { this.expectedClass = expectedClass; this.receivedClass = receivedClass; } diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/ManagerAdapter.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/ManagerAdapter.java index bfda60a..6fcde1f 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/ManagerAdapter.java +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/ManagerAdapter.java @@ -21,8 +21,6 @@ package xyz.auriium.branch.centralized.typeadapter; -import xyz.auriium.branch.interfacing.responses.FailedAdaptingResponse; - /** * Represents something that can convert an object of a certain type to another object * It is used to enable the use of nodes of a unique type on a centralized manager of a separate type. @@ -35,6 +33,6 @@ public interface ManagerAdapter { OUTPUT adapt(INPUT input); boolean canAdapt(INPUT input); - FailedAdaptingResponse failedParseResponse(INPUT input); + FailedAdaptingAnomaly failedParseResponse(INPUT input); } diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/NodeContext.java b/branch-core/src/main/java/xyz/auriium/branch/execution/NodeContext.java index 6836bf6..c4a2b31 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/execution/NodeContext.java +++ b/branch-core/src/main/java/xyz/auriium/branch/execution/NodeContext.java @@ -21,7 +21,7 @@ package xyz.auriium.branch.execution; -import xyz.auriium.branch.interfacing.Response; +import xyz.auriium.branch.interfacing.Anomaly; import xyz.auriium.branch.nodes.CommandNode; import xyz.auriium.branch.nodes.results.SearchInfo; @@ -58,7 +58,7 @@ public interface NodeContext { * Sends a formatted response to a player coded to a key * @param failure the response */ - void response(Response failure); + void response(Anomaly failure); /** * Gets whether the context's delegating sender has access to a permission. On some platforms, this may always be false. diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/responses/NoPermissionResponse.java b/branch-core/src/main/java/xyz/auriium/branch/fallback/NoPermissionAnomaly.java similarity index 79% rename from branch-core/src/main/java/xyz/auriium/branch/interfacing/responses/NoPermissionResponse.java rename to branch-core/src/main/java/xyz/auriium/branch/fallback/NoPermissionAnomaly.java index d29053e..558d7b3 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/interfacing/responses/NoPermissionResponse.java +++ b/branch-core/src/main/java/xyz/auriium/branch/fallback/NoPermissionAnomaly.java @@ -19,15 +19,18 @@ * */ -package xyz.auriium.branch.interfacing.responses; +package xyz.auriium.branch.fallback; -import xyz.auriium.branch.interfacing.Response; +import xyz.auriium.branch.interfacing.Anomaly; -public class NoPermissionResponse implements Response { +/** + * Response fired when someone lacks a permission + */ +public class NoPermissionAnomaly implements Anomaly { private final String lackingPermission; - public NoPermissionResponse(String lackingPermission) { + public NoPermissionAnomaly(String lackingPermission) { this.lackingPermission = lackingPermission; } diff --git a/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/OneBackStrategy.java b/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/OneBackStrategy.java index 48bbf27..8f27da5 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/OneBackStrategy.java +++ b/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/OneBackStrategy.java @@ -21,7 +21,7 @@ package xyz.auriium.branch.fallback.strategies; -import xyz.auriium.branch.interfacing.responses.NoPermissionResponse; +import xyz.auriium.branch.fallback.NoPermissionAnomaly; import xyz.auriium.branch.nodes.CommandNode; import xyz.auriium.branch.nodes.results.SearchInput; import xyz.auriium.branch.nodes.results.SearchInfo; @@ -66,7 +66,7 @@ public Result> attemptPreprocess(T sender, String alias, String[] //something is wrong with the execution (e.g. wrong args or you did something bad), pass above one. if (toBeExecuted.getSuccess().resultingNode().equals(baseNode)) { - return Result.fail(new NoPermissionResponse(baseNode.getPermission().failureIdentifiableName())); + return Result.fail(new NoPermissionAnomaly(baseNode.getPermission().failureIdentifiableName())); } else { toBeExecuted = baseNode.getSpecificNode(input.withoutTop()); //regress backwards a node diff --git a/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/PermissionLockoutStrategy.java b/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/PermissionLockoutStrategy.java index 9e4740f..4977507 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/PermissionLockoutStrategy.java +++ b/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/PermissionLockoutStrategy.java @@ -21,7 +21,7 @@ package xyz.auriium.branch.fallback.strategies; -import xyz.auriium.branch.interfacing.responses.NoPermissionResponse; +import xyz.auriium.branch.fallback.NoPermissionAnomaly; import xyz.auriium.branch.nodes.CommandNode; import xyz.auriium.branch.nodes.results.SearchInfo; import xyz.auriium.branch.nodes.results.SearchInput; @@ -40,7 +40,7 @@ public Result> attemptPreprocess(T sender, String alias, String[] //peak object oriented code if (toBeExecuted.isSuccessful() && !toBeExecuted.getSuccess().resultingNode().getPermission().attempt(sender, alias, args)) { - return Result.fail(new NoPermissionResponse(toBeExecuted.getSuccess().resultingNode().getPermission().failureIdentifiableName())); + return Result.fail(new NoPermissionAnomaly(toBeExecuted.getSuccess().resultingNode().getPermission().failureIdentifiableName())); } return toBeExecuted; diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/Response.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/Anomaly.java similarity index 97% rename from branch-core/src/main/java/xyz/auriium/branch/interfacing/Response.java rename to branch-core/src/main/java/xyz/auriium/branch/interfacing/Anomaly.java index a6571c8..9ed9ff4 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/interfacing/Response.java +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/Anomaly.java @@ -24,6 +24,6 @@ /** * Marker interface for a data-carrying object that can be consumed by a responseActionhandler */ -public interface Response { +public interface Anomaly { } diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/ResponseAction.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/ResponseAction.java index 99e576d..6f5e694 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/interfacing/ResponseAction.java +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/ResponseAction.java @@ -26,7 +26,7 @@ * @param t * @param c */ -public interface ResponseAction { +public interface ResponseAction { Message consume(C response); diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/CommonInterfacingHandler.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/CommonInterfacingHandler.java index 2f16fb8..8149d13 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/CommonInterfacingHandler.java +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/CommonInterfacingHandler.java @@ -22,16 +22,16 @@ package xyz.auriium.branch.interfacing.handlers; import xyz.auriium.branch.interfacing.Message; -import xyz.auriium.branch.interfacing.Response; +import xyz.auriium.branch.interfacing.Anomaly; import xyz.auriium.branch.interfacing.ResponseAction; import java.util.Map; public class CommonInterfacingHandler implements InterfacingHandler { - private final Map, ResponseAction> map; + private final Map, ResponseAction> map; - CommonInterfacingHandler(Map, ResponseAction> map) { + CommonInterfacingHandler(Map, ResponseAction> map) { this.map = map; } @@ -41,12 +41,12 @@ public void sendMessage(T recipent, Message message) { } @Override - public void sendMessage(T recipent, Response response) { - getMessage(response).accept(recipent); + public void sendMessage(T recipent, Anomaly anomaly) { + getMessage(anomaly).accept(recipent); } @SuppressWarnings("unchecked") - private ResponseAction get(Class clazz) { + private ResponseAction get(Class clazz) { ResponseAction action = (ResponseAction) map.get(clazz); if (action == null) throw new IllegalStateException("A response was requested but internal map had no binding!"); @@ -55,7 +55,7 @@ private ResponseAction get(Class clazz) { } @SuppressWarnings("unchecked") - private Message getMessage(C response) { + private Message getMessage(C response) { return get((Class) response.getClass()).consume(response); } } diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/DelegatingDefaultMap.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/DelegatingDefaultMap.java index 8650e5e..9720b74 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/DelegatingDefaultMap.java +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/DelegatingDefaultMap.java @@ -21,7 +21,7 @@ package xyz.auriium.branch.interfacing.handlers; -import xyz.auriium.branch.interfacing.Response; +import xyz.auriium.branch.interfacing.Anomaly; import xyz.auriium.branch.interfacing.ResponseAction; public abstract class DelegatingDefaultMap implements MessageMap { @@ -30,7 +30,7 @@ public abstract class DelegatingDefaultMap implements MessageMap { protected abstract InnerMap defaultMap(); @Override - public DelegatingDefaultMap add(Class key, ResponseAction action) { + public DelegatingDefaultMap add(Class key, ResponseAction action) { delegate.add(key,action); return this; diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/InnerMap.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/InnerMap.java index 75a17ba..6d36dee 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/InnerMap.java +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/InnerMap.java @@ -21,7 +21,7 @@ package xyz.auriium.branch.interfacing.handlers; -import xyz.auriium.branch.interfacing.Response; +import xyz.auriium.branch.interfacing.Anomaly; import xyz.auriium.branch.interfacing.ResponseAction; import java.util.HashMap; @@ -29,10 +29,10 @@ public class InnerMap implements MessageMap { - private final Map,ResponseAction> map = new HashMap<>(); + private final Map,ResponseAction> map = new HashMap<>(); @Override - public InnerMap add(Class key, ResponseAction action) { + public InnerMap add(Class key, ResponseAction action) { this.map.put(key,action); return this; diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/InterfacingHandler.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/InterfacingHandler.java index 189ac3f..68b4e93 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/InterfacingHandler.java +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/InterfacingHandler.java @@ -22,7 +22,7 @@ package xyz.auriium.branch.interfacing.handlers; import xyz.auriium.branch.interfacing.Message; -import xyz.auriium.branch.interfacing.Response; +import xyz.auriium.branch.interfacing.Anomaly; /** * Represents a centralized source for message providing as well as context creation. I am aware i spelled recipient wrong. @@ -33,6 +33,6 @@ public interface InterfacingHandler { void sendMessage(T recipent, Message message); - void sendMessage(T recipent, Response response); + void sendMessage(T recipent, Anomaly anomaly); } diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/MessageMap.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/MessageMap.java index f5385ac..4dea2e6 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/MessageMap.java +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/MessageMap.java @@ -21,12 +21,12 @@ package xyz.auriium.branch.interfacing.handlers; -import xyz.auriium.branch.interfacing.Response; +import xyz.auriium.branch.interfacing.Anomaly; import xyz.auriium.branch.interfacing.ResponseAction; public interface MessageMap { - MessageMap add(Class key, ResponseAction action); + MessageMap add(Class key, ResponseAction action); InterfacingHandler make(); diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/responses/NoIntegratedArgsResponse.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/responses/NoIntegratedArgsResponse.java deleted file mode 100644 index ad2c692..0000000 --- a/branch-core/src/main/java/xyz/auriium/branch/interfacing/responses/NoIntegratedArgsResponse.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * - * Branch - * Copyright © 2021 Aurium - * - * Branch is free software: you can redistribute it and/or modify - * It under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * Branch is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Branch. If not, see - * and navigate to version 3 of the GNU Affero General Public License. - * - */ - -package xyz.auriium.branch.interfacing.responses; - -import xyz.auriium.branch.interfacing.Response; - -import java.util.List; - -//This can probably be improved - -/** - * Represents a response to the scenario in which not enough arguments were supplied to execute a splittable - * node, so all alternative commands are suggested. This needs work, however, as it cannot list all alternative commands - * and their arguments just yet. (logic for this must be some kind of greedy queue consumer with potentially dangerous loops) - */ -public class NoIntegratedArgsResponse implements Response { - - private final List alternativeCommands; - - public NoIntegratedArgsResponse(List alternativeCommands) { - this.alternativeCommands = alternativeCommands; - } - - public List getAlternativeCommands() { - return alternativeCommands; - } - -} diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/responses/TooManyArgsResponse.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/TooManyArgsAnomaly.java similarity index 83% rename from branch-core/src/main/java/xyz/auriium/branch/interfacing/responses/TooManyArgsResponse.java rename to branch-core/src/main/java/xyz/auriium/branch/nodes/TooManyArgsAnomaly.java index 78538c7..30da087 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/interfacing/responses/TooManyArgsResponse.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/TooManyArgsAnomaly.java @@ -19,16 +19,16 @@ * */ -package xyz.auriium.branch.interfacing.responses; +package xyz.auriium.branch.nodes; -import xyz.auriium.branch.interfacing.Response; +import xyz.auriium.branch.interfacing.Anomaly; -public class TooManyArgsResponse implements Response { +public class TooManyArgsAnomaly implements Anomaly { private final int expectedArgs; private final int suppliedArgs; - public TooManyArgsResponse(int expectedArgs, int suppliedArgs) { + public TooManyArgsAnomaly(int expectedArgs, int suppliedArgs) { this.expectedArgs = expectedArgs; this.suppliedArgs = suppliedArgs; } diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/SearchInput.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/SearchInput.java index 1fd7016..59afce0 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/SearchInput.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/SearchInput.java @@ -31,7 +31,7 @@ public class SearchInput { - private final List initialPath; //TODO make list or something - i don't care but it must be immutable + private final List initialPath; private final Deque reducablePath; public SearchInput(List initialPath, Deque reducablePath) { diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/FailingResult.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/FailingResult.java index 244eb0e..254290e 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/FailingResult.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/FailingResult.java @@ -21,7 +21,7 @@ package xyz.auriium.branch.nodes.results.model; -import xyz.auriium.branch.interfacing.Response; +import xyz.auriium.branch.interfacing.Anomaly; /** * A result that has failed @@ -29,9 +29,9 @@ */ public class FailingResult implements Result { - private final Response failure; + private final Anomaly failure; - public FailingResult(Response failure) { + public FailingResult(Anomaly failure) { this.failure = failure; } @@ -46,7 +46,7 @@ public T getSuccess() { } @Override - public Response getFailure() { + public Anomaly getFailure() { return failure; } diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/Result.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/Result.java index cb61da6..f9d4c23 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/Result.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/Result.java @@ -21,7 +21,7 @@ package xyz.auriium.branch.nodes.results.model; -import xyz.auriium.branch.interfacing.Response; +import xyz.auriium.branch.interfacing.Anomaly; public interface Result { @@ -29,12 +29,12 @@ public interface Result { T getSuccess(); - Response getFailure(); + Anomaly getFailure(); static SuccessfulResult success(X t) { return new SuccessfulResult<>(t); } - static FailingResult fail(Response failure) { + static FailingResult fail(Anomaly failure) { return new FailingResult<>(failure); } diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/SuccessfulResult.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/SuccessfulResult.java index f1cf2be..ed3e8f7 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/SuccessfulResult.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/SuccessfulResult.java @@ -21,7 +21,7 @@ package xyz.auriium.branch.nodes.results.model; -import xyz.auriium.branch.interfacing.Response; +import xyz.auriium.branch.interfacing.Anomaly; public class SuccessfulResult implements Result { @@ -42,7 +42,7 @@ public T getSuccess() { } @Override - public Response getFailure() { + public Anomaly getFailure() { throw new IllegalStateException("Attempted to get failure of a successful result!"); } } diff --git a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotContext.java b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotContext.java index 1ff9472..d14ecf6 100644 --- a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotContext.java +++ b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotContext.java @@ -24,7 +24,7 @@ import xyz.auriium.branch.execution.AbstractNodeContext; import xyz.auriium.branch.interfacing.handlers.InterfacingHandler; -import xyz.auriium.branch.interfacing.Response; +import xyz.auriium.branch.interfacing.Anomaly; import xyz.auriium.branch.nodes.CommandNode; import xyz.auriium.branch.nodes.results.SearchInfo; import org.bukkit.ChatColor; @@ -48,7 +48,7 @@ public void stringSender(String string) { } @Override - public void response(Response failure) { + public void response(Anomaly failure) { handler.sendMessage(sender,failure); } diff --git a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/adapter/PlayerAdapter.java b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/adapter/PlayerAdapter.java index 81d07bf..164bb6f 100644 --- a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/adapter/PlayerAdapter.java +++ b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/adapter/PlayerAdapter.java @@ -21,7 +21,7 @@ package xyz.auriium.branch.spigot.adapter; -import xyz.auriium.branch.interfacing.responses.FailedAdaptingResponse; +import xyz.auriium.branch.centralized.typeadapter.FailedAdaptingAnomaly; import xyz.auriium.branch.centralized.typeadapter.ManagerAdapter; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -43,8 +43,8 @@ public boolean canAdapt(CommandSender sender) { } @Override - public FailedAdaptingResponse failedParseResponse(CommandSender sender) { - return new FailedAdaptingResponse(Player.class, CommandSender.class); + public FailedAdaptingAnomaly failedParseResponse(CommandSender sender) { + return new FailedAdaptingAnomaly(Player.class, CommandSender.class); } diff --git a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/message/SpigotMessageMap.java b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/message/SpigotMessageMap.java index 81aa22c..d1d201b 100644 --- a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/message/SpigotMessageMap.java +++ b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/message/SpigotMessageMap.java @@ -21,11 +21,11 @@ package xyz.auriium.branch.spigot.message; -import xyz.auriium.branch.interfacing.Response; +import xyz.auriium.branch.interfacing.Anomaly; import xyz.auriium.branch.interfacing.ResponseAction; import xyz.auriium.branch.interfacing.handlers.DelegatingDefaultMap; import xyz.auriium.branch.interfacing.handlers.InnerMap; -import xyz.auriium.branch.interfacing.responses.FailedAdaptingResponse; +import xyz.auriium.branch.centralized.typeadapter.FailedAdaptingAnomaly; import org.bukkit.command.CommandSender; /** @@ -35,7 +35,7 @@ public class SpigotMessageMap extends DelegatingDefaultMap { @Override - public SpigotMessageMap add(Class key, ResponseAction action) { + public SpigotMessageMap add(Class key, ResponseAction action) { return (SpigotMessageMap) super.add(key, action); } @@ -43,7 +43,7 @@ public SpigotMessageMap add(Class key, ResponseAction protected InnerMap defaultMap() { InnerMap map = new InnerMap<>(); - map.add(FailedAdaptingResponse.class, response -> new TextMessage<>( + map.add(FailedAdaptingAnomaly.class, response -> new TextMessage<>( "Expected class: " + response.getExpectedClass().getName() + "Got class: " + response.getReceivedClass() )); From 64ea5ffc9ecb1d19f29b6bd9c52d5dd5440b5b21 Mon Sep 17 00:00:00 2001 From: Matt Date: Tue, 27 Jul 2021 19:59:42 -0700 Subject: [PATCH 05/10] implement some argument stuff --- .../anomalies/NoInputProvidedAnomaly.java | 36 +++++++++++++++++++ .../WrongTypeAnomaly.java} | 6 ++-- .../typeadapter/CommonAdapter.java | 4 ++- .../typeadapter/ManagerAdapter.java | 4 ++- .../auriium/branch/interfacing/Anomaly.java | 5 ++- .../branch/interfacing/handlers/InnerMap.java | 1 + .../nodes/argument/AbstractArgNode.java | 8 ++++- .../branch/nodes/argument/ArgNode.java | 1 + .../{ => model}/ContextualBaseArgument.java | 2 +- .../model/DefaultingIgnorantArgument.java | 4 +++ .../{ => model}/IgnorantBaseArgument.java | 2 +- .../{ => model}/SingleContextualArgument.java | 3 +- .../{ => model}/SingleIgnorantArgument.java | 2 +- .../nodes/argument/types/StringArgument.java | 2 +- .../branch/spigot/adapter/PlayerAdapter.java | 6 ++-- .../spigot/message/SpigotMessageMap.java | 4 +-- 16 files changed, 73 insertions(+), 17 deletions(-) create mode 100644 branch-core/src/main/java/xyz/auriium/branch/anomalies/NoInputProvidedAnomaly.java rename branch-core/src/main/java/xyz/auriium/branch/{centralized/typeadapter/FailedAdaptingAnomaly.java => anomalies/WrongTypeAnomaly.java} (88%) rename branch-core/src/main/java/xyz/auriium/branch/nodes/argument/{ => model}/ContextualBaseArgument.java (97%) create mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/argument/model/DefaultingIgnorantArgument.java rename branch-core/src/main/java/xyz/auriium/branch/nodes/argument/{ => model}/IgnorantBaseArgument.java (79%) rename branch-core/src/main/java/xyz/auriium/branch/nodes/argument/{ => model}/SingleContextualArgument.java (80%) rename branch-core/src/main/java/xyz/auriium/branch/nodes/argument/{ => model}/SingleIgnorantArgument.java (65%) diff --git a/branch-core/src/main/java/xyz/auriium/branch/anomalies/NoInputProvidedAnomaly.java b/branch-core/src/main/java/xyz/auriium/branch/anomalies/NoInputProvidedAnomaly.java new file mode 100644 index 0000000..a14a7ca --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/anomalies/NoInputProvidedAnomaly.java @@ -0,0 +1,36 @@ +package xyz.auriium.branch.anomalies; + +import xyz.auriium.branch.interfacing.Anomaly; + +public class NoInputProvidedAnomaly implements Anomaly { + + private final Class argumentClass; + private final String argumentType; + private final String argumentLabel; + private final int expectedArgs; + private final int gotArgs; + + public NoInputProvidedAnomaly(Class argumentClass, String argumentType, String argumentLabel, int expectedArgs, int gotArgs) { + this.argumentClass = argumentClass; + this.argumentType = argumentType; + this.argumentLabel = argumentLabel; + this.expectedArgs = expectedArgs; + this.gotArgs = gotArgs; + } + + public Class getArgumentClass() { + return argumentClass; + } + + public String getArgumentType() { + return argumentType; + } + + public int getExpectedArgs() { + return expectedArgs; + } + + public int getGotArgs() { + return gotArgs; + } +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/FailedAdaptingAnomaly.java b/branch-core/src/main/java/xyz/auriium/branch/anomalies/WrongTypeAnomaly.java similarity index 88% rename from branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/FailedAdaptingAnomaly.java rename to branch-core/src/main/java/xyz/auriium/branch/anomalies/WrongTypeAnomaly.java index 68775cb..ecdb4d0 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/FailedAdaptingAnomaly.java +++ b/branch-core/src/main/java/xyz/auriium/branch/anomalies/WrongTypeAnomaly.java @@ -19,7 +19,7 @@ * */ -package xyz.auriium.branch.centralized.typeadapter; +package xyz.auriium.branch.anomalies; import xyz.auriium.branch.interfacing.Anomaly; @@ -27,12 +27,12 @@ * Represents a response to the scenario in which a certain object was attempted to be adapted to an extending type * but it was not an instance of it (or similar scenarios, such as attempting to flatmap a certain type to another.) */ -public class FailedAdaptingAnomaly implements Anomaly { +public class WrongTypeAnomaly implements Anomaly { private final Class expectedClass; private final Class receivedClass; - public FailedAdaptingAnomaly(Class expectedClass, Class receivedClass) { + public WrongTypeAnomaly(Class expectedClass, Class receivedClass) { this.expectedClass = expectedClass; this.receivedClass = receivedClass; } diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/CommonAdapter.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/CommonAdapter.java index e06d70e..5657757 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/CommonAdapter.java +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/CommonAdapter.java @@ -21,6 +21,8 @@ package xyz.auriium.branch.centralized.typeadapter; +import xyz.auriium.branch.anomalies.WrongTypeAnomaly; + /** * Represents an adapter that does not convert and simply returns the same object * @param the object type @@ -38,7 +40,7 @@ default boolean canAdapt(T input) { } @Override - default FailedAdaptingAnomaly failedParseResponse(T input) { + default WrongTypeAnomaly failedParseResponse(T input) { throw new IllegalStateException("How did you get here (Since canAdapt is always true this should never occur?)"); } } diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/ManagerAdapter.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/ManagerAdapter.java index 6fcde1f..6aec129 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/ManagerAdapter.java +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/ManagerAdapter.java @@ -21,6 +21,8 @@ package xyz.auriium.branch.centralized.typeadapter; +import xyz.auriium.branch.anomalies.WrongTypeAnomaly; + /** * Represents something that can convert an object of a certain type to another object * It is used to enable the use of nodes of a unique type on a centralized manager of a separate type. @@ -33,6 +35,6 @@ public interface ManagerAdapter { OUTPUT adapt(INPUT input); boolean canAdapt(INPUT input); - FailedAdaptingAnomaly failedParseResponse(INPUT input); + WrongTypeAnomaly failedParseResponse(INPUT input); } diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/Anomaly.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/Anomaly.java index 9ed9ff4..912d042 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/interfacing/Anomaly.java +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/Anomaly.java @@ -22,7 +22,10 @@ package xyz.auriium.branch.interfacing; /** - * Marker interface for a data-carrying object that can be consumed by a responseActionhandler + * Marker interface for a data-carrying control flow object that is + * similar to an exception. Key distinction in that it + * does not interrupt control flow by existing but rather must be manually + * returned. Typically carries data, consumed by a responseActionhandler */ public interface Anomaly { diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/InnerMap.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/InnerMap.java index 6d36dee..136f3e0 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/InnerMap.java +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/InnerMap.java @@ -42,4 +42,5 @@ public InnerMap add(Class key, ResponseAction ac public InterfacingHandler make() { return new CommonInterfacingHandler<>(map); } + } diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/AbstractArgNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/AbstractArgNode.java index e3c3e96..a4675ec 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/AbstractArgNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/AbstractArgNode.java @@ -1,10 +1,12 @@ package xyz.auriium.branch.nodes.argument; +import xyz.auriium.branch.anomalies.NoInputProvidedAnomaly; import xyz.auriium.branch.execution.Block; import xyz.auriium.branch.execution.NodeContext; import xyz.auriium.branch.execution.api.ArgExecution; import xyz.auriium.branch.execution.api.Execution; import xyz.auriium.branch.execution.api.SuggestionHandler; +import xyz.auriium.branch.nodes.argument.model.ContextualBaseArgument; import xyz.auriium.branch.nodes.results.model.Result; import xyz.auriium.branch.nodes.EndpointNode; @@ -25,9 +27,13 @@ public Result> getExecution(NodeContext context) { Arguments argumentObject = new Arguments(); Deque subdeque = new ArrayDeque<>(context.getResults().reducedPath()); + int argsLeft = getArguments().size(); + for (ContextualBaseArgument argument : getArguments()) { - if (subdeque.peek() == null) return Result.fail(null); //noInputProvidedExternal if there + if (subdeque.peek() == null) return Result.fail( + new NoInputProvidedAnomaly(argument.getClass(), argument.getType(), argument.getLabel(), context.getArgs().length + 1, context.getArgs().length) + ); //noInputProvidedExternal if there assert argument.reservedBlockAmount() > 0 : "Cannot be negative or zero"; diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ArgNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ArgNode.java index 425ab20..379ffaa 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ArgNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ArgNode.java @@ -5,6 +5,7 @@ import xyz.auriium.branch.fallback.permissions.Permission; import xyz.auriium.branch.interfacing.information.description.Description; import xyz.auriium.branch.interfacing.information.description.StringDescription; +import xyz.auriium.branch.nodes.argument.model.ContextualBaseArgument; import java.util.List; diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ContextualBaseArgument.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/model/ContextualBaseArgument.java similarity index 97% rename from branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ContextualBaseArgument.java rename to branch-core/src/main/java/xyz/auriium/branch/nodes/argument/model/ContextualBaseArgument.java index 363cd7c..efead51 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ContextualBaseArgument.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/model/ContextualBaseArgument.java @@ -1,4 +1,4 @@ -package xyz.auriium.branch.nodes.argument; +package xyz.auriium.branch.nodes.argument.model; import xyz.auriium.branch.execution.Block; import xyz.auriium.branch.execution.NodeContext; diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/model/DefaultingIgnorantArgument.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/model/DefaultingIgnorantArgument.java new file mode 100644 index 0000000..e1035de --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/model/DefaultingIgnorantArgument.java @@ -0,0 +1,4 @@ +package xyz.auriium.branch.nodes.argument.model; + +public class DefaultingIgnorantArgument { +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/IgnorantBaseArgument.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/model/IgnorantBaseArgument.java similarity index 79% rename from branch-core/src/main/java/xyz/auriium/branch/nodes/argument/IgnorantBaseArgument.java rename to branch-core/src/main/java/xyz/auriium/branch/nodes/argument/model/IgnorantBaseArgument.java index 217257c..618e8f4 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/IgnorantBaseArgument.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/model/IgnorantBaseArgument.java @@ -1,4 +1,4 @@ -package xyz.auriium.branch.nodes.argument; +package xyz.auriium.branch.nodes.argument.model; /** * Base argument that ignores context diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/SingleContextualArgument.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/model/SingleContextualArgument.java similarity index 80% rename from branch-core/src/main/java/xyz/auriium/branch/nodes/argument/SingleContextualArgument.java rename to branch-core/src/main/java/xyz/auriium/branch/nodes/argument/model/SingleContextualArgument.java index b516366..b652d07 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/SingleContextualArgument.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/model/SingleContextualArgument.java @@ -1,6 +1,7 @@ -package xyz.auriium.branch.nodes.argument; +package xyz.auriium.branch.nodes.argument.model; import xyz.auriium.branch.execution.Block; +import xyz.auriium.branch.nodes.argument.model.ContextualBaseArgument; import xyz.auriium.branch.nodes.results.model.Result; import java.util.List; diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/SingleIgnorantArgument.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/model/SingleIgnorantArgument.java similarity index 65% rename from branch-core/src/main/java/xyz/auriium/branch/nodes/argument/SingleIgnorantArgument.java rename to branch-core/src/main/java/xyz/auriium/branch/nodes/argument/model/SingleIgnorantArgument.java index 9374459..e8b17d3 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/SingleIgnorantArgument.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/model/SingleIgnorantArgument.java @@ -1,4 +1,4 @@ -package xyz.auriium.branch.nodes.argument; +package xyz.auriium.branch.nodes.argument.model; public interface SingleIgnorantArgument extends SingleContextualArgument { } diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/types/StringArgument.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/types/StringArgument.java index e1e3da1..bad06b4 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/types/StringArgument.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/types/StringArgument.java @@ -1,7 +1,7 @@ package xyz.auriium.branch.nodes.argument.types; import xyz.auriium.branch.execution.Block; -import xyz.auriium.branch.nodes.argument.SingleIgnorantArgument; +import xyz.auriium.branch.nodes.argument.model.SingleIgnorantArgument; import xyz.auriium.branch.nodes.results.model.Result; public class StringArgument implements SingleIgnorantArgument { diff --git a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/adapter/PlayerAdapter.java b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/adapter/PlayerAdapter.java index 164bb6f..45fc21f 100644 --- a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/adapter/PlayerAdapter.java +++ b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/adapter/PlayerAdapter.java @@ -21,7 +21,7 @@ package xyz.auriium.branch.spigot.adapter; -import xyz.auriium.branch.centralized.typeadapter.FailedAdaptingAnomaly; +import xyz.auriium.branch.anomalies.WrongTypeAnomaly; import xyz.auriium.branch.centralized.typeadapter.ManagerAdapter; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -43,8 +43,8 @@ public boolean canAdapt(CommandSender sender) { } @Override - public FailedAdaptingAnomaly failedParseResponse(CommandSender sender) { - return new FailedAdaptingAnomaly(Player.class, CommandSender.class); + public WrongTypeAnomaly failedParseResponse(CommandSender sender) { + return new WrongTypeAnomaly(Player.class, CommandSender.class); } diff --git a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/message/SpigotMessageMap.java b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/message/SpigotMessageMap.java index d1d201b..a6d83a0 100644 --- a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/message/SpigotMessageMap.java +++ b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/message/SpigotMessageMap.java @@ -25,7 +25,7 @@ import xyz.auriium.branch.interfacing.ResponseAction; import xyz.auriium.branch.interfacing.handlers.DelegatingDefaultMap; import xyz.auriium.branch.interfacing.handlers.InnerMap; -import xyz.auriium.branch.centralized.typeadapter.FailedAdaptingAnomaly; +import xyz.auriium.branch.anomalies.WrongTypeAnomaly; import org.bukkit.command.CommandSender; /** @@ -43,7 +43,7 @@ public SpigotMessageMap add(Class key, ResponseAction< protected InnerMap defaultMap() { InnerMap map = new InnerMap<>(); - map.add(FailedAdaptingAnomaly.class, response -> new TextMessage<>( + map.add(WrongTypeAnomaly.class, response -> new TextMessage<>( "Expected class: " + response.getExpectedClass().getName() + "Got class: " + response.getReceivedClass() )); From cab6620e4cdb0dcce9f696b38696be0df0326cff Mon Sep 17 00:00:00 2001 From: Matt Date: Wed, 28 Jul 2021 14:32:32 -0700 Subject: [PATCH 06/10] Implement new anomaly/interfacing systems (Closes #10, #15) The old message and anomaly system was inefficient and also didn't make much sense, so i've torn it apart and replaced it fully from the ground up The new anomaly system requires you to define a few things: MessageBoss, which handles communication from the framework to both objects of the initial type (base input type of the manager, like CommandSender) and objects of the adapted type (objects desired by the framework user, like Player) AnomalyCaptioner, which builds the base message objects for EACH anomaly AnomalyPrinter, which adds messages to messages generated by the AnomalyCaptioner based on anomaly TYPE and the AnomalyHandler, which delegates to the prior 3 in order to consume Anomalies and send them to the player. The MessageBoss allows for you to use your own custom Message type, meaning that we can produce (MessageBoss, AnomalyCaptioner, AnomalyPrinter) implementations for existing user interfacing frameworks like Kyori-Adventure AND a homegrown implementation if users desire to not use existing frameworks. --- branch-adventure/branch-adventure.iml | 23 +++++++ branch-adventure/pom.xml | 36 +++++++++++ .../adventure/AdventureMessageBoss.java | 12 ++++ .../adventure/AdventureMessageWorker.java | 25 +++++++ .../adventure/AudienceTransmogrifier.java | 12 ++++ .../branch/centralized/NodeSource.java | 2 +- .../centralized/base/AbstractNodeBase.java | 21 +++--- .../centralized/base/DelegatingNodeBase.java | 10 +-- .../branch/centralized/base/NodeBase.java | 2 +- .../centralized/base/NodeBaseBuilder.java | 41 +++++------- .../branch/centralized/base/RunNodeBase.java | 7 +- .../information/description/Description.java | 2 +- .../description/GeneratingDescription.java | 2 +- .../LazyGeneratingDescription.java | 2 +- .../description/StringDescription.java | 2 +- .../information/help/HelpEntry.java | 2 +- .../information/help/Shit.java | 2 +- .../typeadapter/CommonAdapter.java | 4 +- .../typeadapter/ManagerAdapter.java | 4 +- .../xyz/auriium/branch/execution/Block.java | 9 +-- .../auriium/branch/execution/BlockType.java | 13 ++++ .../auriium/branch/execution/NodeContext.java | 14 +--- .../auriium/branch/execution/StringBlock.java | 10 +-- .../fallback/strategies/OneBackStrategy.java | 2 +- .../strategies/PermissionLockoutStrategy.java | 2 +- .../branch/interfacing/MessageBoss.java | 22 +++++++ .../branch/interfacing/MessageWorker.java | 13 ++++ .../branch/interfacing/ResponseAction.java | 2 + .../branch/interfacing/WorkerMessageBoss.java | 35 ++++++++++ .../{ => exceptional}/Anomaly.java | 4 +- .../exceptional/AnomalyHandler.java | 26 ++++++++ .../interfacing/exceptional/AnomalyType.java | 10 +++ .../exceptional/CommonAnomalyHandler.java | 32 +++++++++ .../anomalies}/NoPermissionAnomaly.java | 10 ++- .../TooFewInputsInternalAnomaly.java} | 14 ++-- .../anomalies/WrongTypeParseAnomaly.java} | 14 ++-- .../exceptional/caption/AnomalyCaptioner.java | 15 +++++ .../caption/CommonAnomalyCaptioner.java | 31 +++++++++ .../caption/SettableCaptioner.java | 11 ++++ .../exceptional/color/ColorMessage.java | 22 +++++++ .../color/ColorMessageController.java | 10 +++ .../exceptional/color/ColorWorker.java | 24 +++++++ .../exceptional/printing/AnomalyPrinter.java | 13 ++++ .../exceptional/printing/SettablePrinter.java | 31 +++++++++ .../exceptional/printing/StringlyPrinter.java | 15 +++++ .../handlers/CommonInterfacingHandler.java | 61 ------------------ .../handlers/DelegatingDefaultMap.java | 43 ------------ .../branch/interfacing/handlers/InnerMap.java | 46 ------------- .../handlers/InterfacingHandler.java | 38 ----------- .../interfacing/handlers/MessageMap.java | 33 ---------- .../xyz/auriium/branch/nodes/CommandNode.java | 2 +- .../branch/nodes/TooManyArgsAnomaly.java | 8 ++- .../nodes/argument/AbstractArgNode.java | 4 +- .../branch/nodes/argument/ArgNode.java | 4 +- .../branch/nodes/branching/BranchingNode.java | 4 +- .../branching/ExclusiveBranchingBuilder.java | 4 +- .../branching/InclusiveBranchingBuilder.java | 4 +- .../auriium/branch/nodes/help/HelpNode.java | 2 +- .../nodes/results/model/FailingResult.java | 2 +- .../branch/nodes/results/model/Result.java | 2 +- .../nodes/results/model/SuccessfulResult.java | 2 +- .../branch/nodes/single/SingleNode.java | 4 +- .../nodes/single/SingleNodeBuilder.java | 4 +- branch-core/src/test/java/ExecutionTest.java | 2 +- .../auriium/branch/spigot/SpigotContext.java | 19 +----- .../branch/spigot/SpigotContextProvider.java | 9 +-- .../auriium/branch/spigot/SpigotManager.java | 9 +-- .../branch/spigot/adapter/PlayerAdapter.java | 6 +- .../spigot/message/FormattedMessage.java | 37 ----------- .../spigot/message/SpigotMessageMap.java | 52 --------------- .../branch/spigot/message/TextMessage.java | 44 ------------- docs/.nojekyll | 0 docs/README.md | 48 +++++++------- docs/_coverpage.md | 13 ---- docs/_sidebar.md | 32 --------- docs/index.html | 27 -------- docs/media/branch.png | Bin 2008 -> 0 bytes pom.xml | 13 +++- 78 files changed, 599 insertions(+), 594 deletions(-) create mode 100644 branch-adventure/branch-adventure.iml create mode 100644 branch-adventure/pom.xml create mode 100644 branch-adventure/src/main/java/xyz/auriium/branch/adventure/AdventureMessageBoss.java create mode 100644 branch-adventure/src/main/java/xyz/auriium/branch/adventure/AdventureMessageWorker.java create mode 100644 branch-adventure/src/main/java/xyz/auriium/branch/adventure/AudienceTransmogrifier.java rename branch-core/src/main/java/xyz/auriium/branch/{interfacing => centralized}/information/description/Description.java (93%) rename branch-core/src/main/java/xyz/auriium/branch/{interfacing => centralized}/information/description/GeneratingDescription.java (89%) rename branch-core/src/main/java/xyz/auriium/branch/{interfacing => centralized}/information/description/LazyGeneratingDescription.java (91%) rename branch-core/src/main/java/xyz/auriium/branch/{interfacing => centralized}/information/description/StringDescription.java (84%) rename branch-core/src/main/java/xyz/auriium/branch/{interfacing => centralized}/information/help/HelpEntry.java (93%) rename branch-core/src/main/java/xyz/auriium/branch/{interfacing => centralized}/information/help/Shit.java (93%) create mode 100644 branch-core/src/main/java/xyz/auriium/branch/execution/BlockType.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/interfacing/MessageBoss.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/interfacing/MessageWorker.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/interfacing/WorkerMessageBoss.java rename branch-core/src/main/java/xyz/auriium/branch/interfacing/{ => exceptional}/Anomaly.java (93%) create mode 100644 branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/AnomalyHandler.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/AnomalyType.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/CommonAnomalyHandler.java rename branch-core/src/main/java/xyz/auriium/branch/{fallback => interfacing/exceptional/anomalies}/NoPermissionAnomaly.java (80%) rename branch-core/src/main/java/xyz/auriium/branch/{anomalies/NoInputProvidedAnomaly.java => interfacing/exceptional/anomalies/TooFewInputsInternalAnomaly.java} (58%) rename branch-core/src/main/java/xyz/auriium/branch/{anomalies/WrongTypeAnomaly.java => interfacing/exceptional/anomalies/WrongTypeParseAnomaly.java} (73%) create mode 100644 branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/caption/AnomalyCaptioner.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/caption/CommonAnomalyCaptioner.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/caption/SettableCaptioner.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/color/ColorMessage.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/color/ColorMessageController.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/color/ColorWorker.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/printing/AnomalyPrinter.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/printing/SettablePrinter.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/printing/StringlyPrinter.java delete mode 100644 branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/CommonInterfacingHandler.java delete mode 100644 branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/DelegatingDefaultMap.java delete mode 100644 branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/InnerMap.java delete mode 100644 branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/InterfacingHandler.java delete mode 100644 branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/MessageMap.java delete mode 100644 branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/message/FormattedMessage.java delete mode 100644 branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/message/SpigotMessageMap.java delete mode 100644 branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/message/TextMessage.java delete mode 100644 docs/.nojekyll delete mode 100644 docs/_coverpage.md delete mode 100644 docs/_sidebar.md delete mode 100644 docs/index.html delete mode 100644 docs/media/branch.png diff --git a/branch-adventure/branch-adventure.iml b/branch-adventure/branch-adventure.iml new file mode 100644 index 0000000..641ad76 --- /dev/null +++ b/branch-adventure/branch-adventure.iml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/branch-adventure/pom.xml b/branch-adventure/pom.xml new file mode 100644 index 0000000..30bef17 --- /dev/null +++ b/branch-adventure/pom.xml @@ -0,0 +1,36 @@ + + + + branch + xyz.auriium + 0.1.0 + + 4.0.0 + + branch-spigot-adventure + + + ${compiler.version} + ${compiler.version} + + + + + xyz.auriium + branch-core + + + net.kyori + adventure-api + 4.8.1 + + + net.kyori + adventure-text-serializer-legacy + 4.8.1 + + + + \ No newline at end of file diff --git a/branch-adventure/src/main/java/xyz/auriium/branch/adventure/AdventureMessageBoss.java b/branch-adventure/src/main/java/xyz/auriium/branch/adventure/AdventureMessageBoss.java new file mode 100644 index 0000000..bd1c8dd --- /dev/null +++ b/branch-adventure/src/main/java/xyz/auriium/branch/adventure/AdventureMessageBoss.java @@ -0,0 +1,12 @@ +package xyz.auriium.branch.adventure; + +import net.kyori.adventure.text.Component; +import xyz.auriium.branch.interfacing.MessageWorker; +import xyz.auriium.branch.interfacing.WorkerMessageBoss; + +public class AdventureMessageBoss extends WorkerMessageBoss { + + public AdventureMessageBoss(AudienceTransmogrifier iTransmogrifier, AudienceTransmogrifier aTransmogrifier) { + super(new AdventureMessageWorker<>(iTransmogrifier), new AdventureMessageWorker<>(aTransmogrifier)); + } +} diff --git a/branch-adventure/src/main/java/xyz/auriium/branch/adventure/AdventureMessageWorker.java b/branch-adventure/src/main/java/xyz/auriium/branch/adventure/AdventureMessageWorker.java new file mode 100644 index 0000000..2716206 --- /dev/null +++ b/branch-adventure/src/main/java/xyz/auriium/branch/adventure/AdventureMessageWorker.java @@ -0,0 +1,25 @@ +package xyz.auriium.branch.adventure; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; +import xyz.auriium.branch.interfacing.MessageWorker; + +public class AdventureMessageWorker implements MessageWorker { + + private final AudienceTransmogrifier transmogrifier; + + public AdventureMessageWorker(AudienceTransmogrifier transmogrifier) { + this.transmogrifier = transmogrifier; + } + + @Override + public void sendMessage(String message, T type) { + transmogrifier.transmogrify(type).sendMessage(LegacyComponentSerializer.legacyAmpersand().deserialize(message)); + } + + @Override + public void sendObject(Component message, T type) { + transmogrifier.transmogrify(type).sendMessage(message); + } +} diff --git a/branch-adventure/src/main/java/xyz/auriium/branch/adventure/AudienceTransmogrifier.java b/branch-adventure/src/main/java/xyz/auriium/branch/adventure/AudienceTransmogrifier.java new file mode 100644 index 0000000..3f89906 --- /dev/null +++ b/branch-adventure/src/main/java/xyz/auriium/branch/adventure/AudienceTransmogrifier.java @@ -0,0 +1,12 @@ +package xyz.auriium.branch.adventure; + +import net.kyori.adventure.audience.Audience; + +/** + * I am not one to be outdone with names + */ +public interface AudienceTransmogrifier { + + Audience transmogrify(A user); + +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/NodeSource.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/NodeSource.java index 3cc6c81..58c95ee 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/NodeSource.java +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/NodeSource.java @@ -2,7 +2,7 @@ import xyz.auriium.branch.execution.api.ExecutionHandler; import xyz.auriium.branch.fallback.permissions.Permission; -import xyz.auriium.branch.interfacing.information.description.Description; +import xyz.auriium.branch.centralized.information.description.Description; import xyz.auriium.branch.nodes.branching.ExclusiveBranchingBuilder; import xyz.auriium.branch.nodes.branching.InclusiveBranchingBuilder; import xyz.auriium.branch.nodes.single.SingleNode; diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/base/AbstractNodeBase.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/base/AbstractNodeBase.java index fc31ca2..cdb787c 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/base/AbstractNodeBase.java +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/base/AbstractNodeBase.java @@ -26,7 +26,7 @@ import xyz.auriium.branch.execution.ContextProvider; import xyz.auriium.branch.execution.NodeContext; import xyz.auriium.branch.fallback.strategies.FallbackSearchStrategy; -import xyz.auriium.branch.interfacing.handlers.InterfacingHandler; +import xyz.auriium.branch.interfacing.exceptional.AnomalyHandler; import xyz.auriium.branch.nodes.CommandNode; import xyz.auriium.branch.nodes.results.SearchInfo; import xyz.auriium.branch.nodes.results.model.Result; @@ -40,21 +40,23 @@ */ public abstract class AbstractNodeBase implements NodeBase { + private final ManagerAdapter adapter; + private final AnomalyHandler handler; private final CommandNode baseNode; private final FallbackSearchStrategy strategy; private final ContextProvider provider; - private final InterfacingHandler handler; - public AbstractNodeBase(ManagerAdapter adapter, CommandNode baseNode, FallbackSearchStrategy strategy, ContextProvider provider, InterfacingHandler handler) { + protected AbstractNodeBase(ManagerAdapter adapter, AnomalyHandler handler, CommandNode baseNode, FallbackSearchStrategy strategy, ContextProvider provider) { this.adapter = adapter; + this.handler = handler; this.baseNode = baseNode; this.strategy = strategy; this.provider = provider; - this.handler = handler; } + /** * Method for execution of runnable once runnable is found * Exists in order to allow for concurrent-type nodebases @@ -67,8 +69,8 @@ public void execute(I input, String alias, String[] args) { //have not aqcuired C-type (cannot use Result object or message handling-parsing) if (!adapter.canAdapt(input)) { - handler.sendMessage(input,adapter.failedParseResponse(input)); //invalid access of handler with new c-type/t-type ruleset - //to remedy we must implement a base-type handler in all handlers. + handler.communicateNotAdapted(input, adapter.failedParseResponse(input)); + return; } @@ -79,7 +81,8 @@ public void execute(I input, String alias, String[] args) { Result> result = strategy.attemptPreprocess(adaptedSender,alias,args,baseNode); if (!result.isSuccessful()) { - handler.sendMessage(input, result.getFailure()); + handler.communicateAdapted(adaptedSender, result.getFailure()); + return; } @@ -89,7 +92,9 @@ public void execute(I input, String alias, String[] args) { Result> executionResult = info.resultingNode().getExecution(produced); if (!executionResult.isSuccessful()) { - handler.sendMessage(input, result.getFailure()); + handler.communicateAdapted(adaptedSender, result.getFailure()); + + return; } submitExecution(executionResult.getSuccess()); diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/base/DelegatingNodeBase.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/base/DelegatingNodeBase.java index bcf827e..9826e5e 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/base/DelegatingNodeBase.java +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/base/DelegatingNodeBase.java @@ -3,8 +3,9 @@ import xyz.auriium.branch.centralized.typeadapter.ManagerAdapter; import xyz.auriium.branch.execution.ContextProvider; import xyz.auriium.branch.fallback.strategies.FallbackSearchStrategy; -import xyz.auriium.branch.interfacing.information.description.Description; -import xyz.auriium.branch.interfacing.handlers.InterfacingHandler; +import xyz.auriium.branch.centralized.information.description.Description; +import xyz.auriium.branch.interfacing.exceptional.AnomalyHandler; +import xyz.auriium.branch.nodes.CommandNode; import xyz.auriium.branch.nodes.IdentifiableNode; /** @@ -14,12 +15,13 @@ public class DelegatingNodeBase extends RunNodeBase { private final IdentifiableNode baseNode; - public DelegatingNodeBase(ManagerAdapter adapter, IdentifiableNode baseNode, FallbackSearchStrategy strategy, ContextProvider provider, InterfacingHandler handler) { - super(adapter, baseNode, strategy, provider, handler); + protected DelegatingNodeBase(ManagerAdapter adapter, AnomalyHandler handler, IdentifiableNode baseNode, FallbackSearchStrategy strategy, ContextProvider provider) { + super(adapter, handler, baseNode, strategy, provider); this.baseNode = baseNode; } + @Override public Description getDescription() { return baseNode.getDescription(); diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/base/NodeBase.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/base/NodeBase.java index f8acd04..82cc03d 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/base/NodeBase.java +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/base/NodeBase.java @@ -21,7 +21,7 @@ package xyz.auriium.branch.centralized.base; -import xyz.auriium.branch.interfacing.information.description.Description; +import xyz.auriium.branch.centralized.information.description.Description; import java.util.Collections; import java.util.List; diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/base/NodeBaseBuilder.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/base/NodeBaseBuilder.java index df04198..9e06bd2 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/base/NodeBaseBuilder.java +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/base/NodeBaseBuilder.java @@ -25,7 +25,7 @@ import xyz.auriium.branch.centralized.typeadapter.ManagerAdapter; import xyz.auriium.branch.execution.ContextProvider; import xyz.auriium.branch.fallback.strategies.FallbackSearchStrategy; -import xyz.auriium.branch.interfacing.handlers.InterfacingHandler; +import xyz.auriium.branch.interfacing.exceptional.AnomalyHandler; import xyz.auriium.branch.nodes.IdentifiableNode; import java.util.*; @@ -33,27 +33,26 @@ /** * Default implementation of a class that produces adaptingNodeBases * - * @param Input type - * @param Adapted type + * @param Input type + * @param Adapted type */ -public class NodeBaseBuilder { +public class NodeBaseBuilder { - private final CentralizedManager manager; - private final ManagerAdapter adapter; + private final CentralizedManager manager; - private IdentifiableNode node; - private FallbackSearchStrategy strategy; - private ContextProvider provider; - private InterfacingHandler handler; + private final ManagerAdapter adapter; + private AnomalyHandler handler; - private final List aliases = new ArrayList<>(); + private IdentifiableNode node; + private FallbackSearchStrategy strategy; + private ContextProvider provider; - public NodeBaseBuilder(CentralizedManager manager, ManagerAdapter adapter) { + public NodeBaseBuilder(CentralizedManager manager, ManagerAdapter adapter) { this.manager = manager; this.adapter = adapter; } - public NodeBaseBuilder(CentralizedManager manager, ManagerAdapter adapter, FallbackSearchStrategy strategy, ContextProvider provider, InterfacingHandler handler) { + public NodeBaseBuilder(CentralizedManager manager, ManagerAdapter adapter, FallbackSearchStrategy strategy, ContextProvider provider, AnomalyHandler handler) { this.manager = manager; this.adapter = adapter; this.strategy = strategy; @@ -61,31 +60,25 @@ public NodeBaseBuilder(CentralizedManager manager, ManagerAdapter ad this.handler = handler; } - public NodeBaseBuilder withNode(IdentifiableNode node) { + public NodeBaseBuilder withNode(IdentifiableNode node) { this.node = node; return this; } - public NodeBaseBuilder withAliases(String... aliases) { - this.aliases.addAll(Arrays.asList(aliases)); - - return this; - } - - public NodeBaseBuilder customStrategy(FallbackSearchStrategy strategy) { + public NodeBaseBuilder customStrategy(FallbackSearchStrategy strategy) { this.strategy = strategy; return this; } - public NodeBaseBuilder customProvider(ContextProvider provider) { + public NodeBaseBuilder customProvider(ContextProvider provider) { this.provider = provider; return this; } - public NodeBaseBuilder customInterfacing(InterfacingHandler handler) { + public NodeBaseBuilder customInterfacing(AnomalyHandler handler) { this.handler = handler; return this; @@ -97,6 +90,6 @@ public void finish() { Objects.requireNonNull(provider); Objects.requireNonNull(handler); - manager.newCommand(new DelegatingNodeBase<>(adapter,node,strategy,provider,handler)); + manager.newCommand(new DelegatingNodeBase<>(adapter,handler,node,strategy,provider)); } } diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/base/RunNodeBase.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/base/RunNodeBase.java index f6019ad..3d84ecb 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/base/RunNodeBase.java +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/base/RunNodeBase.java @@ -4,7 +4,7 @@ import xyz.auriium.branch.execution.ContextProvider; import xyz.auriium.branch.execution.api.Execution; import xyz.auriium.branch.fallback.strategies.FallbackSearchStrategy; -import xyz.auriium.branch.interfacing.handlers.InterfacingHandler; +import xyz.auriium.branch.interfacing.exceptional.AnomalyHandler; import xyz.auriium.branch.nodes.CommandNode; /** @@ -14,8 +14,9 @@ */ public abstract class RunNodeBase extends AbstractNodeBase { - public RunNodeBase(ManagerAdapter adapter, CommandNode baseNode, FallbackSearchStrategy strategy, ContextProvider provider, InterfacingHandler handler) { - super(adapter, baseNode, strategy, provider, handler); + + protected RunNodeBase(ManagerAdapter adapter, AnomalyHandler handler, CommandNode baseNode, FallbackSearchStrategy strategy, ContextProvider provider) { + super(adapter, handler, baseNode, strategy, provider); } @Override diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/information/description/Description.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/information/description/Description.java similarity index 93% rename from branch-core/src/main/java/xyz/auriium/branch/interfacing/information/description/Description.java rename to branch-core/src/main/java/xyz/auriium/branch/centralized/information/description/Description.java index 28a1d68..d858bbd 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/interfacing/information/description/Description.java +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/information/description/Description.java @@ -19,7 +19,7 @@ * */ -package xyz.auriium.branch.interfacing.information.description; +package xyz.auriium.branch.centralized.information.description; public interface Description { diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/information/description/GeneratingDescription.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/information/description/GeneratingDescription.java similarity index 89% rename from branch-core/src/main/java/xyz/auriium/branch/interfacing/information/description/GeneratingDescription.java rename to branch-core/src/main/java/xyz/auriium/branch/centralized/information/description/GeneratingDescription.java index 4de2ba0..fbdbb0c 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/interfacing/information/description/GeneratingDescription.java +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/information/description/GeneratingDescription.java @@ -1,4 +1,4 @@ -package xyz.auriium.branch.interfacing.information.description; +package xyz.auriium.branch.centralized.information.description; import java.util.function.Supplier; diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/information/description/LazyGeneratingDescription.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/information/description/LazyGeneratingDescription.java similarity index 91% rename from branch-core/src/main/java/xyz/auriium/branch/interfacing/information/description/LazyGeneratingDescription.java rename to branch-core/src/main/java/xyz/auriium/branch/centralized/information/description/LazyGeneratingDescription.java index 3657bd3..f3d7790 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/interfacing/information/description/LazyGeneratingDescription.java +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/information/description/LazyGeneratingDescription.java @@ -1,4 +1,4 @@ -package xyz.auriium.branch.interfacing.information.description; +package xyz.auriium.branch.centralized.information.description; import java.util.function.Supplier; diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/information/description/StringDescription.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/information/description/StringDescription.java similarity index 84% rename from branch-core/src/main/java/xyz/auriium/branch/interfacing/information/description/StringDescription.java rename to branch-core/src/main/java/xyz/auriium/branch/centralized/information/description/StringDescription.java index 4157621..9e9250d 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/interfacing/information/description/StringDescription.java +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/information/description/StringDescription.java @@ -1,4 +1,4 @@ -package xyz.auriium.branch.interfacing.information.description; +package xyz.auriium.branch.centralized.information.description; /** * Immutable description returning a simple string diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/information/help/HelpEntry.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/information/help/HelpEntry.java similarity index 93% rename from branch-core/src/main/java/xyz/auriium/branch/interfacing/information/help/HelpEntry.java rename to branch-core/src/main/java/xyz/auriium/branch/centralized/information/help/HelpEntry.java index 92a0228..b045f73 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/interfacing/information/help/HelpEntry.java +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/information/help/HelpEntry.java @@ -19,7 +19,7 @@ * */ -package xyz.auriium.branch.interfacing.information.help; +package xyz.auriium.branch.centralized.information.help; public interface HelpEntry { } diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/information/help/Shit.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/information/help/Shit.java similarity index 93% rename from branch-core/src/main/java/xyz/auriium/branch/interfacing/information/help/Shit.java rename to branch-core/src/main/java/xyz/auriium/branch/centralized/information/help/Shit.java index 2470443..514ebc4 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/interfacing/information/help/Shit.java +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/information/help/Shit.java @@ -19,7 +19,7 @@ * */ -package xyz.auriium.branch.interfacing.information.help; +package xyz.auriium.branch.centralized.information.help; public class Shit { diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/CommonAdapter.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/CommonAdapter.java index 5657757..6ab3783 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/CommonAdapter.java +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/CommonAdapter.java @@ -21,7 +21,7 @@ package xyz.auriium.branch.centralized.typeadapter; -import xyz.auriium.branch.anomalies.WrongTypeAnomaly; +import xyz.auriium.branch.interfacing.exceptional.anomalies.WrongTypeParseAnomaly; /** * Represents an adapter that does not convert and simply returns the same object @@ -40,7 +40,7 @@ default boolean canAdapt(T input) { } @Override - default WrongTypeAnomaly failedParseResponse(T input) { + default WrongTypeParseAnomaly failedParseResponse(T input) { throw new IllegalStateException("How did you get here (Since canAdapt is always true this should never occur?)"); } } diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/ManagerAdapter.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/ManagerAdapter.java index 6aec129..679384c 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/ManagerAdapter.java +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/ManagerAdapter.java @@ -21,7 +21,7 @@ package xyz.auriium.branch.centralized.typeadapter; -import xyz.auriium.branch.anomalies.WrongTypeAnomaly; +import xyz.auriium.branch.interfacing.exceptional.anomalies.WrongTypeParseAnomaly; /** * Represents something that can convert an object of a certain type to another object @@ -35,6 +35,6 @@ public interface ManagerAdapter { OUTPUT adapt(INPUT input); boolean canAdapt(INPUT input); - WrongTypeAnomaly failedParseResponse(INPUT input); + WrongTypeParseAnomaly failedParseResponse(INPUT input); } diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/Block.java b/branch-core/src/main/java/xyz/auriium/branch/execution/Block.java index 0ccc4e5..deba171 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/execution/Block.java +++ b/branch-core/src/main/java/xyz/auriium/branch/execution/Block.java @@ -22,13 +22,14 @@ package xyz.auriium.branch.execution; /** - * Represents an unparsed component of a command argument input structure + * Represents a Branch-provided identification structure for the identifier of specific structures */ public interface Block { String getIdentifier(); + BlockType getType(); - boolean equals(Object object); - boolean isVisual(); - + default boolean matches(String string) { + return getIdentifier().equalsIgnoreCase(string); + } } diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/BlockType.java b/branch-core/src/main/java/xyz/auriium/branch/execution/BlockType.java new file mode 100644 index 0000000..272e834 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/execution/BlockType.java @@ -0,0 +1,13 @@ +package xyz.auriium.branch.execution; + +public enum BlockType { + + INPUT, + + LITERAL_COMMAND, //used only to identify the string representing the root of a command e.g. command in /command group [bar] + LITERAL_GROUP, //used for blocks representing a subgroup's identifier e.g. group in /command group [bar] + ARGUMENT_OPTIONAL, //used for blocks representing a command's optional argument e.g. bar in /command group [bar] + ARGUMENT_REQUIRED //used for blocks representing a required argument e.g. foo in /command group [bar] + + +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/NodeContext.java b/branch-core/src/main/java/xyz/auriium/branch/execution/NodeContext.java index c4a2b31..ca2bbff 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/execution/NodeContext.java +++ b/branch-core/src/main/java/xyz/auriium/branch/execution/NodeContext.java @@ -21,7 +21,7 @@ package xyz.auriium.branch.execution; -import xyz.auriium.branch.interfacing.Anomaly; +import xyz.auriium.branch.interfacing.exceptional.Anomaly; import xyz.auriium.branch.nodes.CommandNode; import xyz.auriium.branch.nodes.results.SearchInfo; @@ -48,18 +48,6 @@ public interface NodeContext { CommandNode getBaseExecutedNode(); SearchInfo getResults(); - /** - * Sends an ugly string to the player using the platform's message handler. Whatever floats your boat! - * @param string string - */ - void stringSender(String string); - - /** - * Sends a formatted response to a player coded to a key - * @param failure the response - */ - void response(Anomaly failure); - /** * Gets whether the context's delegating sender has access to a permission. On some platforms, this may always be false. * @param string the permission diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/StringBlock.java b/branch-core/src/main/java/xyz/auriium/branch/execution/StringBlock.java index 88da243..10b903c 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/execution/StringBlock.java +++ b/branch-core/src/main/java/xyz/auriium/branch/execution/StringBlock.java @@ -37,6 +37,11 @@ public String getIdentifier() { return identifier; } + @Override + public BlockType getType() { + return BlockType.INPUT; /// FIXME: 7/28/2021 replace this entire class with specialized blocks (potentially with actual node refs) + } + public static Block of(String string) { if (string.contains(" ")) throw new IllegalStateException("Identifier cannot have spaces!"); @@ -51,11 +56,6 @@ public boolean equals(Object o) { return identifier.equalsIgnoreCase(that.identifier); } - @Override - public boolean isVisual() { - return true; - } - @Override public int hashCode() { return identifier.hashCode(); diff --git a/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/OneBackStrategy.java b/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/OneBackStrategy.java index 8f27da5..e5c3a00 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/OneBackStrategy.java +++ b/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/OneBackStrategy.java @@ -21,7 +21,7 @@ package xyz.auriium.branch.fallback.strategies; -import xyz.auriium.branch.fallback.NoPermissionAnomaly; +import xyz.auriium.branch.interfacing.exceptional.anomalies.NoPermissionAnomaly; import xyz.auriium.branch.nodes.CommandNode; import xyz.auriium.branch.nodes.results.SearchInput; import xyz.auriium.branch.nodes.results.SearchInfo; diff --git a/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/PermissionLockoutStrategy.java b/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/PermissionLockoutStrategy.java index 4977507..306d1d9 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/PermissionLockoutStrategy.java +++ b/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/PermissionLockoutStrategy.java @@ -21,7 +21,7 @@ package xyz.auriium.branch.fallback.strategies; -import xyz.auriium.branch.fallback.NoPermissionAnomaly; +import xyz.auriium.branch.interfacing.exceptional.anomalies.NoPermissionAnomaly; import xyz.auriium.branch.nodes.CommandNode; import xyz.auriium.branch.nodes.results.SearchInfo; import xyz.auriium.branch.nodes.results.SearchInput; diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/MessageBoss.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/MessageBoss.java new file mode 100644 index 0000000..55fa725 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/MessageBoss.java @@ -0,0 +1,22 @@ +package xyz.auriium.branch.interfacing; + +/** + * MessageBoss represents message sending class - if a command sender fails adaptation or never even reaches adaptation + * phase it will be sent a message via type I interfacer, otherwise it will be sent a message via type A interfacer + * + * @param type I interfacer (I for initial type) handles communication with initial user + * @param type A of adapted type handles communication with converted user + * @param message object type (like Component for kyori or BreakMessage for default) + */ +public interface MessageBoss { + + void sendMessageToInitial(String message, I initialType); + void sendMessageToAdapted(String message, A adaptedType); + + void sendObjectToInitial(M message, I initialType); + void sendObjectToAdapted(M message, A adaptedType); + + + + +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/MessageWorker.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/MessageWorker.java new file mode 100644 index 0000000..e28a4d9 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/MessageWorker.java @@ -0,0 +1,13 @@ +package xyz.auriium.branch.interfacing; + +/** + * Represents a subcomponent of a {@link xyz.auriium.branch.interfacing.MessageBoss} that only handles one type + * @param Type + * @param Message object type + */ +public interface MessageWorker { + + void sendMessage(String message, T type); + void sendObject(M message, T type); + +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/ResponseAction.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/ResponseAction.java index 6f5e694..02a7e1d 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/interfacing/ResponseAction.java +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/ResponseAction.java @@ -21,6 +21,8 @@ package xyz.auriium.branch.interfacing; +import xyz.auriium.branch.interfacing.exceptional.Anomaly; + /** * Represents an action that is fired when a response is received * @param t diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/WorkerMessageBoss.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/WorkerMessageBoss.java new file mode 100644 index 0000000..0099e63 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/WorkerMessageBoss.java @@ -0,0 +1,35 @@ +package xyz.auriium.branch.interfacing; + +/** + * MessageBoss thta delegates to two MessageWorker + */ +public class WorkerMessageBoss implements MessageBoss { + + private final MessageWorker initialWorker; + private final MessageWorker adaptedWorker; + + public WorkerMessageBoss(MessageWorker initialWorker, MessageWorker adaptedWorker) { + this.initialWorker = initialWorker; + this.adaptedWorker = adaptedWorker; + } + + @Override + public void sendMessageToInitial(String message, I initialType) { + this.initialWorker.sendMessage(message, initialType); + } + + @Override + public void sendMessageToAdapted(String message, A adaptedType) { + this.adaptedWorker.sendMessage(message, adaptedType); + } + + @Override + public void sendObjectToInitial(M message, I initialType) { + this.initialWorker.sendObject(message, initialType); + } + + @Override + public void sendObjectToAdapted(M message, A adaptedType) { + this.adaptedWorker.sendObject(message, adaptedType); + } +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/Anomaly.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/Anomaly.java similarity index 93% rename from branch-core/src/main/java/xyz/auriium/branch/interfacing/Anomaly.java rename to branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/Anomaly.java index 912d042..c120e66 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/interfacing/Anomaly.java +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/Anomaly.java @@ -19,7 +19,7 @@ * */ -package xyz.auriium.branch.interfacing; +package xyz.auriium.branch.interfacing.exceptional; /** * Marker interface for a data-carrying control flow object that is @@ -29,4 +29,6 @@ */ public interface Anomaly { + AnomalyType type(); + } diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/AnomalyHandler.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/AnomalyHandler.java new file mode 100644 index 0000000..4b8880f --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/AnomalyHandler.java @@ -0,0 +1,26 @@ +package xyz.auriium.branch.interfacing.exceptional; + +/** + * Represents the most outer-facing interface for interacting with and handling thrown anomalies and + * sending them to the player (interfacing). + * + * Typically delegates actual message handling to a {@link xyz.auriium.branch.interfacing.MessageBoss}, + * whereas retrieval of captions to a {@link xyz.auriium.branch.interfacing.exceptional.caption.AnomalyCaptioner} + */ +public interface AnomalyHandler { + + /** + * Communicates an anomaly to the user and/or to console + * @param notAdapted the anomaly + * @param anomaly the exceptional anomaly + */ + void communicateNotAdapted(I notAdapted, Anomaly anomaly); + + /** + * Commuicates an anomaly to the adapted user + * @param adapted adapted user + * @param anomaly anomaly + */ + void communicateAdapted(A adapted, Anomaly anomaly); + +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/AnomalyType.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/AnomalyType.java new file mode 100644 index 0000000..a24fe75 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/AnomalyType.java @@ -0,0 +1,10 @@ +package xyz.auriium.branch.interfacing.exceptional; + +public enum AnomalyType { + + INVALID_SYNTAX, + INVALID_SENDER, + NO_PERMISSION, + ARGUMENT_PARSING + +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/CommonAnomalyHandler.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/CommonAnomalyHandler.java new file mode 100644 index 0000000..a7ed170 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/CommonAnomalyHandler.java @@ -0,0 +1,32 @@ +package xyz.auriium.branch.interfacing.exceptional; + +import xyz.auriium.branch.interfacing.MessageBoss; +import xyz.auriium.branch.interfacing.exceptional.caption.AnomalyCaptioner; +import xyz.auriium.branch.interfacing.exceptional.printing.AnomalyPrinter; + +public class CommonAnomalyHandler implements AnomalyHandler{ + + private final MessageBoss messageBoss; + private final AnomalyPrinter handler; + private final AnomalyCaptioner captioner; + + public CommonAnomalyHandler(MessageBoss messageBoss, AnomalyPrinter handler, AnomalyCaptioner captioner) { + this.messageBoss = messageBoss; + this.handler = handler; + this.captioner = captioner; + } + + @Override + public void communicateNotAdapted(I notAdapted, Anomaly anomaly) { + messageBoss.sendObjectToInitial(make(anomaly), notAdapted); + } + + @Override + public void communicateAdapted(A adapted, Anomaly anomaly) { + messageBoss.sendObjectToAdapted(make(anomaly), adapted); + } + + M make(Anomaly anomaly) { + return handler.makeMessage(anomaly.type(), captioner.retrieveMessage(anomaly)); + } +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/fallback/NoPermissionAnomaly.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/anomalies/NoPermissionAnomaly.java similarity index 80% rename from branch-core/src/main/java/xyz/auriium/branch/fallback/NoPermissionAnomaly.java rename to branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/anomalies/NoPermissionAnomaly.java index 558d7b3..a98de67 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/fallback/NoPermissionAnomaly.java +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/anomalies/NoPermissionAnomaly.java @@ -19,9 +19,10 @@ * */ -package xyz.auriium.branch.fallback; +package xyz.auriium.branch.interfacing.exceptional.anomalies; -import xyz.auriium.branch.interfacing.Anomaly; +import xyz.auriium.branch.interfacing.exceptional.Anomaly; +import xyz.auriium.branch.interfacing.exceptional.AnomalyType; /** * Response fired when someone lacks a permission @@ -37,4 +38,9 @@ public NoPermissionAnomaly(String lackingPermission) { public String getLackingPermission() { return lackingPermission; } + + @Override + public AnomalyType type() { + return AnomalyType.NO_PERMISSION; + } } diff --git a/branch-core/src/main/java/xyz/auriium/branch/anomalies/NoInputProvidedAnomaly.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/anomalies/TooFewInputsInternalAnomaly.java similarity index 58% rename from branch-core/src/main/java/xyz/auriium/branch/anomalies/NoInputProvidedAnomaly.java rename to branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/anomalies/TooFewInputsInternalAnomaly.java index a14a7ca..89220b7 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/anomalies/NoInputProvidedAnomaly.java +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/anomalies/TooFewInputsInternalAnomaly.java @@ -1,8 +1,9 @@ -package xyz.auriium.branch.anomalies; +package xyz.auriium.branch.interfacing.exceptional.anomalies; -import xyz.auriium.branch.interfacing.Anomaly; +import xyz.auriium.branch.interfacing.exceptional.Anomaly; +import xyz.auriium.branch.interfacing.exceptional.AnomalyType; -public class NoInputProvidedAnomaly implements Anomaly { +public class TooFewInputsInternalAnomaly implements Anomaly { private final Class argumentClass; private final String argumentType; @@ -10,7 +11,7 @@ public class NoInputProvidedAnomaly implements Anomaly { private final int expectedArgs; private final int gotArgs; - public NoInputProvidedAnomaly(Class argumentClass, String argumentType, String argumentLabel, int expectedArgs, int gotArgs) { + public TooFewInputsInternalAnomaly(Class argumentClass, String argumentType, String argumentLabel, int expectedArgs, int gotArgs) { this.argumentClass = argumentClass; this.argumentType = argumentType; this.argumentLabel = argumentLabel; @@ -33,4 +34,9 @@ public int getExpectedArgs() { public int getGotArgs() { return gotArgs; } + + @Override + public AnomalyType type() { + return AnomalyType.INVALID_SYNTAX; //TODO fix + } } diff --git a/branch-core/src/main/java/xyz/auriium/branch/anomalies/WrongTypeAnomaly.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/anomalies/WrongTypeParseAnomaly.java similarity index 73% rename from branch-core/src/main/java/xyz/auriium/branch/anomalies/WrongTypeAnomaly.java rename to branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/anomalies/WrongTypeParseAnomaly.java index ecdb4d0..a998065 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/anomalies/WrongTypeAnomaly.java +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/anomalies/WrongTypeParseAnomaly.java @@ -19,20 +19,22 @@ * */ -package xyz.auriium.branch.anomalies; +package xyz.auriium.branch.interfacing.exceptional.anomalies; -import xyz.auriium.branch.interfacing.Anomaly; +import xyz.auriium.branch.interfacing.exceptional.Anomaly; +import xyz.auriium.branch.interfacing.exceptional.AnomalyHandler; +import xyz.auriium.branch.interfacing.exceptional.AnomalyType; /** * Represents a response to the scenario in which a certain object was attempted to be adapted to an extending type * but it was not an instance of it (or similar scenarios, such as attempting to flatmap a certain type to another.) */ -public class WrongTypeAnomaly implements Anomaly { +public class WrongTypeParseAnomaly implements Anomaly { private final Class expectedClass; private final Class receivedClass; - public WrongTypeAnomaly(Class expectedClass, Class receivedClass) { + public WrongTypeParseAnomaly(Class expectedClass, Class receivedClass) { this.expectedClass = expectedClass; this.receivedClass = receivedClass; } @@ -45,4 +47,8 @@ public Class getReceivedClass() { return receivedClass; } + @Override + public AnomalyType type() { + return AnomalyType.INVALID_SENDER; + } } diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/caption/AnomalyCaptioner.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/caption/AnomalyCaptioner.java new file mode 100644 index 0000000..e922766 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/caption/AnomalyCaptioner.java @@ -0,0 +1,15 @@ +package xyz.auriium.branch.interfacing.exceptional.caption; + +import xyz.auriium.branch.interfacing.exceptional.Anomaly; + +/** + * Represents something that can handle anomalies and retrieve stringly simplified messages based on them + * These strings will then be redistributed to the + * + * TODO make these return type M message + */ +public interface AnomalyCaptioner { + + M retrieveMessage(Anomaly anomaly); + +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/caption/CommonAnomalyCaptioner.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/caption/CommonAnomalyCaptioner.java new file mode 100644 index 0000000..951cfdc --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/caption/CommonAnomalyCaptioner.java @@ -0,0 +1,31 @@ +package xyz.auriium.branch.interfacing.exceptional.caption; + +import xyz.auriium.branch.interfacing.exceptional.Anomaly; + +import java.util.HashMap; +import java.util.Map; +import java.util.function.Function; + +public class CommonAnomalyCaptioner implements SettableCaptioner { + + private final Map, Function> records = new HashMap<>(); + + @Override + public M retrieveMessage(Anomaly anomaly) { + return retrieve(anomaly).apply(anomaly); + } + + @SuppressWarnings("unchecked") + private Function retrieve(A anomaly) { + return (Function) records.get(anomaly.getClass()); + } + + @Override + public SettableCaptioner set(Class anomalyType, Function parser) { + records.put(anomalyType, parser); + + return this; + } + + +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/caption/SettableCaptioner.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/caption/SettableCaptioner.java new file mode 100644 index 0000000..573a0bd --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/caption/SettableCaptioner.java @@ -0,0 +1,11 @@ +package xyz.auriium.branch.interfacing.exceptional.caption; + +import xyz.auriium.branch.interfacing.exceptional.Anomaly; + +import java.util.function.Function; + +public interface SettableCaptioner extends AnomalyCaptioner { + + SettableCaptioner set(Class anomalyType, Function parser); + +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/color/ColorMessage.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/color/ColorMessage.java new file mode 100644 index 0000000..04c8e7b --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/color/ColorMessage.java @@ -0,0 +1,22 @@ +package xyz.auriium.branch.interfacing.exceptional.color; + +/* + * Homegrown shitty adventure alternative (just use the fucking adventure module) + * Represents a message that can be colored with + */ +public class ColorMessage { + + private final String string; + + public ColorMessage(String string) { + this.string = string; + } + + public String getString() { + return string; + } + + public static ColorMessage of(String string) { + return new ColorMessage(string); + } +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/color/ColorMessageController.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/color/ColorMessageController.java new file mode 100644 index 0000000..97a1faa --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/color/ColorMessageController.java @@ -0,0 +1,10 @@ +package xyz.auriium.branch.interfacing.exceptional.color; + +import java.awt.*; + +public interface ColorMessageController { + + String parse(ColorMessage message); + void setColor(int index, Color color); + +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/color/ColorWorker.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/color/ColorWorker.java new file mode 100644 index 0000000..6e419e1 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/color/ColorWorker.java @@ -0,0 +1,24 @@ +package xyz.auriium.branch.interfacing.exceptional.color; + +import xyz.auriium.branch.interfacing.MessageWorker; + +public abstract class ColorWorker implements MessageWorker { + + private final ColorMessageController controller; + + public ColorWorker(ColorMessageController controller) { + this.controller = controller; + } + + @Override + public void sendMessage(String message, T type) { + sendTo(controller.parse(ColorMessage.of(message)), type); + } + + @Override + public void sendObject(ColorMessage message, T type) { + sendTo(controller.parse(message), type); + } + + abstract void sendTo(String alreadyColored, T type); +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/printing/AnomalyPrinter.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/printing/AnomalyPrinter.java new file mode 100644 index 0000000..3a3c623 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/printing/AnomalyPrinter.java @@ -0,0 +1,13 @@ +package xyz.auriium.branch.interfacing.exceptional.printing; + +import xyz.auriium.branch.interfacing.exceptional.AnomalyType; + +/** + * Printer that converts anomaly type + message into message object + * @param message object + */ +public interface AnomalyPrinter { + + M makeMessage(AnomalyType type, M initial); + +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/printing/SettablePrinter.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/printing/SettablePrinter.java new file mode 100644 index 0000000..0403123 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/printing/SettablePrinter.java @@ -0,0 +1,31 @@ +package xyz.auriium.branch.interfacing.exceptional.printing; + +import xyz.auriium.branch.interfacing.exceptional.AnomalyType; + +import java.util.HashMap; +import java.util.Map; +import java.util.function.Function; + +public abstract class SettablePrinter implements AnomalyPrinter { + + private final Map> map = new HashMap<>(); + + @Override + public M makeMessage(AnomalyType type, M string) { + var func = map.get(type); + + if (func == null) throw new IllegalStateException("No type parser found for type: " + type.name()); + + return func.apply(string); + } + + public SettablePrinter add(AnomalyType type, Function function) { + this.map.put(type,function); + + return this; + } + + + + +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/printing/StringlyPrinter.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/printing/StringlyPrinter.java new file mode 100644 index 0000000..e2e42ea --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/printing/StringlyPrinter.java @@ -0,0 +1,15 @@ +package xyz.auriium.branch.interfacing.exceptional.printing; + +import xyz.auriium.branch.interfacing.exceptional.AnomalyType; + +public class StringlyPrinter extends SettablePrinter { + + public static SettablePrinter defaults() { + return new StringlyPrinter() + .add(AnomalyType.ARGUMENT_PARSING, s -> "Error parsing argument: " + s) + .add(AnomalyType.INVALID_SENDER, s -> "Invalid sender: " + s) + .add(AnomalyType.INVALID_SYNTAX, s -> "Invalid syntax: " + s) + .add(AnomalyType.NO_PERMISSION, s -> "No permission to execute command!"); + } + +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/CommonInterfacingHandler.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/CommonInterfacingHandler.java deleted file mode 100644 index 8149d13..0000000 --- a/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/CommonInterfacingHandler.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * - * Branch - * Copyright © 2021 Aurium - * - * Branch is free software: you can redistribute it and/or modify - * It under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * Branch is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Branch. If not, see - * and navigate to version 3 of the GNU Affero General Public License. - * - */ - -package xyz.auriium.branch.interfacing.handlers; - -import xyz.auriium.branch.interfacing.Message; -import xyz.auriium.branch.interfacing.Anomaly; -import xyz.auriium.branch.interfacing.ResponseAction; - -import java.util.Map; - -public class CommonInterfacingHandler implements InterfacingHandler { - - private final Map, ResponseAction> map; - - CommonInterfacingHandler(Map, ResponseAction> map) { - this.map = map; - } - - @Override - public void sendMessage(T recipent, Message message) { - message.accept(recipent); - } - - @Override - public void sendMessage(T recipent, Anomaly anomaly) { - getMessage(anomaly).accept(recipent); - } - - @SuppressWarnings("unchecked") - private ResponseAction get(Class clazz) { - ResponseAction action = (ResponseAction) map.get(clazz); - - if (action == null) throw new IllegalStateException("A response was requested but internal map had no binding!"); - - return action; - } - - @SuppressWarnings("unchecked") - private Message getMessage(C response) { - return get((Class) response.getClass()).consume(response); - } -} diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/DelegatingDefaultMap.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/DelegatingDefaultMap.java deleted file mode 100644 index 9720b74..0000000 --- a/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/DelegatingDefaultMap.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * - * Branch - * Copyright © 2021 Aurium - * - * Branch is free software: you can redistribute it and/or modify - * It under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * Branch is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Branch. If not, see - * and navigate to version 3 of the GNU Affero General Public License. - * - */ - -package xyz.auriium.branch.interfacing.handlers; - -import xyz.auriium.branch.interfacing.Anomaly; -import xyz.auriium.branch.interfacing.ResponseAction; - -public abstract class DelegatingDefaultMap implements MessageMap { - - private final InnerMap delegate = defaultMap(); - protected abstract InnerMap defaultMap(); - - @Override - public DelegatingDefaultMap add(Class key, ResponseAction action) { - delegate.add(key,action); - - return this; - } - - @Override - public InterfacingHandler make() { - return delegate.make(); - } -} diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/InnerMap.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/InnerMap.java deleted file mode 100644 index 136f3e0..0000000 --- a/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/InnerMap.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * - * Branch - * Copyright © 2021 Aurium - * - * Branch is free software: you can redistribute it and/or modify - * It under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * Branch is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Branch. If not, see - * and navigate to version 3 of the GNU Affero General Public License. - * - */ - -package xyz.auriium.branch.interfacing.handlers; - -import xyz.auriium.branch.interfacing.Anomaly; -import xyz.auriium.branch.interfacing.ResponseAction; - -import java.util.HashMap; -import java.util.Map; - -public class InnerMap implements MessageMap { - - private final Map,ResponseAction> map = new HashMap<>(); - - @Override - public InnerMap add(Class key, ResponseAction action) { - this.map.put(key,action); - - return this; - } - - @Override - public InterfacingHandler make() { - return new CommonInterfacingHandler<>(map); - } - -} diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/InterfacingHandler.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/InterfacingHandler.java deleted file mode 100644 index 68b4e93..0000000 --- a/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/InterfacingHandler.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * - * Branch - * Copyright © 2021 Aurium - * - * Branch is free software: you can redistribute it and/or modify - * It under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * Branch is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Branch. If not, see - * and navigate to version 3 of the GNU Affero General Public License. - * - */ - -package xyz.auriium.branch.interfacing.handlers; - -import xyz.auriium.branch.interfacing.Message; -import xyz.auriium.branch.interfacing.Anomaly; - -/** - * Represents a centralized source for message providing as well as context creation. I am aware i spelled recipient wrong. - * @param the type - * - * TODO InterfacingHandler // complete handler redux - */ -public interface InterfacingHandler { - - void sendMessage(T recipent, Message message); - void sendMessage(T recipent, Anomaly anomaly); - -} diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/MessageMap.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/MessageMap.java deleted file mode 100644 index 4dea2e6..0000000 --- a/branch-core/src/main/java/xyz/auriium/branch/interfacing/handlers/MessageMap.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * - * Branch - * Copyright © 2021 Aurium - * - * Branch is free software: you can redistribute it and/or modify - * It under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * Branch is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Branch. If not, see - * and navigate to version 3 of the GNU Affero General Public License. - * - */ - -package xyz.auriium.branch.interfacing.handlers; - -import xyz.auriium.branch.interfacing.Anomaly; -import xyz.auriium.branch.interfacing.ResponseAction; - -public interface MessageMap { - - MessageMap add(Class key, ResponseAction action); - - InterfacingHandler make(); - -} diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/CommandNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/CommandNode.java index b7962ae..252b214 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/CommandNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/CommandNode.java @@ -24,7 +24,7 @@ import xyz.auriium.branch.execution.NodeContext; import xyz.auriium.branch.execution.api.Execution; import xyz.auriium.branch.execution.api.SuggestionHandler; -import xyz.auriium.branch.interfacing.information.description.Description; +import xyz.auriium.branch.centralized.information.description.Description; import xyz.auriium.branch.nodes.results.SearchInput; import xyz.auriium.branch.nodes.results.SearchInfo; import xyz.auriium.branch.fallback.permissions.Permission; diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/TooManyArgsAnomaly.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/TooManyArgsAnomaly.java index 30da087..1b3128d 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/TooManyArgsAnomaly.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/TooManyArgsAnomaly.java @@ -21,7 +21,8 @@ package xyz.auriium.branch.nodes; -import xyz.auriium.branch.interfacing.Anomaly; +import xyz.auriium.branch.interfacing.exceptional.Anomaly; +import xyz.auriium.branch.interfacing.exceptional.AnomalyType; public class TooManyArgsAnomaly implements Anomaly { @@ -40,4 +41,9 @@ public int getExpectedArgs() { public int getSuppliedArgs() { return suppliedArgs; } + + @Override + public AnomalyType type() { + return AnomalyType.INVALID_SYNTAX; + } } diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/AbstractArgNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/AbstractArgNode.java index a4675ec..8b4fd2a 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/AbstractArgNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/AbstractArgNode.java @@ -1,6 +1,6 @@ package xyz.auriium.branch.nodes.argument; -import xyz.auriium.branch.anomalies.NoInputProvidedAnomaly; +import xyz.auriium.branch.interfacing.exceptional.anomalies.TooFewInputsInternalAnomaly; import xyz.auriium.branch.execution.Block; import xyz.auriium.branch.execution.NodeContext; import xyz.auriium.branch.execution.api.ArgExecution; @@ -32,7 +32,7 @@ public Result> getExecution(NodeContext context) { for (ContextualBaseArgument argument : getArguments()) { if (subdeque.peek() == null) return Result.fail( - new NoInputProvidedAnomaly(argument.getClass(), argument.getType(), argument.getLabel(), context.getArgs().length + 1, context.getArgs().length) + new TooFewInputsInternalAnomaly(argument.getClass(), argument.getType(), argument.getLabel(), context.getArgs().length + 1, context.getArgs().length) ); //noInputProvidedExternal if there assert argument.reservedBlockAmount() > 0 : "Cannot be negative or zero"; diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ArgNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ArgNode.java index 379ffaa..32b77b0 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ArgNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ArgNode.java @@ -3,8 +3,8 @@ import xyz.auriium.branch.execution.Block; import xyz.auriium.branch.fallback.permissions.EmptyPermission; import xyz.auriium.branch.fallback.permissions.Permission; -import xyz.auriium.branch.interfacing.information.description.Description; -import xyz.auriium.branch.interfacing.information.description.StringDescription; +import xyz.auriium.branch.centralized.information.description.Description; +import xyz.auriium.branch.centralized.information.description.StringDescription; import xyz.auriium.branch.nodes.argument.model.ContextualBaseArgument; import java.util.List; diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/BranchingNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/BranchingNode.java index 9238cd2..a170cf4 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/BranchingNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/BranchingNode.java @@ -25,7 +25,7 @@ import xyz.auriium.branch.execution.api.Execution; import xyz.auriium.branch.execution.NodeContext; import xyz.auriium.branch.execution.api.SuggestionHandler; -import xyz.auriium.branch.interfacing.information.description.Description; +import xyz.auriium.branch.centralized.information.description.Description; import xyz.auriium.branch.nodes.IdentifiableNode; import xyz.auriium.branch.fallback.permissions.Permission; import xyz.auriium.branch.nodes.results.model.Result; @@ -57,7 +57,7 @@ public BranchingNode(PrestoredSet nodes, Block path, Description description, List strings = new ArrayList<>(); for (IdentifiableNode node : nodes.getContents()) { - if (node.getPermission().attempt(ctx) && node.getIdentifier().isVisual()) { + if (node.getPermission().attempt(ctx)) { strings.add(node.getIdentifier()); } } diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/ExclusiveBranchingBuilder.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/ExclusiveBranchingBuilder.java index 6e0ad0f..beb1516 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/ExclusiveBranchingBuilder.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/ExclusiveBranchingBuilder.java @@ -4,8 +4,8 @@ import xyz.auriium.branch.execution.StringBlock; import xyz.auriium.branch.fallback.permissions.EmptyPermission; import xyz.auriium.branch.fallback.permissions.Permission; -import xyz.auriium.branch.interfacing.information.description.Description; -import xyz.auriium.branch.interfacing.information.description.StringDescription; +import xyz.auriium.branch.centralized.information.description.Description; +import xyz.auriium.branch.centralized.information.description.StringDescription; import xyz.auriium.branch.nodes.help.HelpNode; import xyz.auriium.branch.nodes.Builder; import xyz.auriium.branch.nodes.CommandNode; diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/InclusiveBranchingBuilder.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/InclusiveBranchingBuilder.java index 0446680..c5f18b3 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/InclusiveBranchingBuilder.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/InclusiveBranchingBuilder.java @@ -25,8 +25,8 @@ import xyz.auriium.branch.execution.StringBlock; import xyz.auriium.branch.fallback.permissions.Permission; import xyz.auriium.branch.fallback.permissions.EmptyPermission; -import xyz.auriium.branch.interfacing.information.description.Description; -import xyz.auriium.branch.interfacing.information.description.StringDescription; +import xyz.auriium.branch.centralized.information.description.Description; +import xyz.auriium.branch.centralized.information.description.StringDescription; import xyz.auriium.branch.nodes.EndpointNode; import xyz.auriium.branch.nodes.help.HelpNode; import xyz.auriium.branch.nodes.Builder; diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/help/HelpNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/help/HelpNode.java index b95f5ae..6f50ae5 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/help/HelpNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/help/HelpNode.java @@ -28,7 +28,7 @@ import xyz.auriium.branch.execution.api.Execution; import xyz.auriium.branch.execution.api.SuggestionHandler; import xyz.auriium.branch.fallback.permissions.Permission; -import xyz.auriium.branch.interfacing.information.description.Description; +import xyz.auriium.branch.centralized.information.description.Description; import xyz.auriium.branch.nodes.EndpointNode; import xyz.auriium.branch.nodes.results.SearchInfo; import xyz.auriium.branch.nodes.results.SearchInput; diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/FailingResult.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/FailingResult.java index 254290e..9aaeb44 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/FailingResult.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/FailingResult.java @@ -21,7 +21,7 @@ package xyz.auriium.branch.nodes.results.model; -import xyz.auriium.branch.interfacing.Anomaly; +import xyz.auriium.branch.interfacing.exceptional.Anomaly; /** * A result that has failed diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/Result.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/Result.java index f9d4c23..4c31a24 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/Result.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/Result.java @@ -21,7 +21,7 @@ package xyz.auriium.branch.nodes.results.model; -import xyz.auriium.branch.interfacing.Anomaly; +import xyz.auriium.branch.interfacing.exceptional.Anomaly; public interface Result { diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/SuccessfulResult.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/SuccessfulResult.java index ed3e8f7..5aca9d6 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/SuccessfulResult.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/SuccessfulResult.java @@ -21,7 +21,7 @@ package xyz.auriium.branch.nodes.results.model; -import xyz.auriium.branch.interfacing.Anomaly; +import xyz.auriium.branch.interfacing.exceptional.Anomaly; public class SuccessfulResult implements Result { diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/single/SingleNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/single/SingleNode.java index 0ef4298..7a26135 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/single/SingleNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/single/SingleNode.java @@ -4,8 +4,8 @@ import xyz.auriium.branch.execution.api.ExecutionHandler; import xyz.auriium.branch.fallback.permissions.EmptyPermission; import xyz.auriium.branch.fallback.permissions.Permission; -import xyz.auriium.branch.interfacing.information.description.Description; -import xyz.auriium.branch.interfacing.information.description.StringDescription; +import xyz.auriium.branch.centralized.information.description.Description; +import xyz.auriium.branch.centralized.information.description.StringDescription; public class SingleNode extends AbstractSingleNode { diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/single/SingleNodeBuilder.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/single/SingleNodeBuilder.java index bbad8ca..bcfaee6 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/single/SingleNodeBuilder.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/single/SingleNodeBuilder.java @@ -4,8 +4,8 @@ import xyz.auriium.branch.execution.api.ExecutionHandler; import xyz.auriium.branch.fallback.permissions.EmptyPermission; import xyz.auriium.branch.fallback.permissions.Permission; -import xyz.auriium.branch.interfacing.information.description.Description; -import xyz.auriium.branch.interfacing.information.description.StringDescription; +import xyz.auriium.branch.centralized.information.description.Description; +import xyz.auriium.branch.centralized.information.description.StringDescription; import java.util.Objects; diff --git a/branch-core/src/test/java/ExecutionTest.java b/branch-core/src/test/java/ExecutionTest.java index ba11564..d6e0a9d 100644 --- a/branch-core/src/test/java/ExecutionTest.java +++ b/branch-core/src/test/java/ExecutionTest.java @@ -24,7 +24,7 @@ import xyz.auriium.branch.centralized.NodeSource; import xyz.auriium.branch.execution.StringBlock; import xyz.auriium.branch.fallback.permissions.EmptyPermission; -import xyz.auriium.branch.interfacing.information.description.StringDescription; +import xyz.auriium.branch.centralized.information.description.StringDescription; import xyz.auriium.branch.nodes.IdentifiableNode; import xyz.auriium.branch.nodes.single.SingleNode; import xyz.auriium.branch.tests.StringManager; diff --git a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotContext.java b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotContext.java index d14ecf6..e6d9219 100644 --- a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotContext.java +++ b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotContext.java @@ -22,34 +22,19 @@ package xyz.auriium.branch.spigot; +import org.bukkit.command.CommandSender; import xyz.auriium.branch.execution.AbstractNodeContext; -import xyz.auriium.branch.interfacing.handlers.InterfacingHandler; -import xyz.auriium.branch.interfacing.Anomaly; import xyz.auriium.branch.nodes.CommandNode; import xyz.auriium.branch.nodes.results.SearchInfo; -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; public class SpigotContext extends AbstractNodeContext { private final T sender; - private final InterfacingHandler handler; - protected SpigotContext(T sender, String alias, String[] args, CommandNode baseNode, SearchInfo result, InterfacingHandler handler) { + protected SpigotContext(T sender, String alias, String[] args, CommandNode baseNode, SearchInfo result) { super(sender, alias, args, baseNode, result); this.sender = sender; - this.handler = handler; - } - - @Override - public void stringSender(String string) { - this.sender.sendMessage(ChatColor.translateAlternateColorCodes('&',string)); - } - - @Override - public void response(Anomaly failure) { - handler.sendMessage(sender,failure); } @Override diff --git a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotContextProvider.java b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotContextProvider.java index e4c0c2c..a7aa6b4 100644 --- a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotContextProvider.java +++ b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotContextProvider.java @@ -24,21 +24,14 @@ import xyz.auriium.branch.execution.ContextProvider; import xyz.auriium.branch.execution.NodeContext; -import xyz.auriium.branch.interfacing.handlers.InterfacingHandler; import xyz.auriium.branch.nodes.CommandNode; import xyz.auriium.branch.nodes.results.SearchInfo; import org.bukkit.command.CommandSender; public class SpigotContextProvider implements ContextProvider { - private final InterfacingHandler handler; - - public SpigotContextProvider(InterfacingHandler handler) { - this.handler = handler; - } - @Override public NodeContext produce(C sender, String alias, String[] strings, CommandNode baseNode, SearchInfo search) { - return new SpigotContext<>(sender,alias,strings,baseNode,search, handler); + return new SpigotContext<>(sender,alias,strings,baseNode,search); } } diff --git a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotManager.java b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotManager.java index d982775..2aab2fe 100644 --- a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotManager.java +++ b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotManager.java @@ -21,20 +21,17 @@ package xyz.auriium.branch.spigot; +import org.bukkit.command.CommandSender; +import org.bukkit.plugin.java.JavaPlugin; import xyz.auriium.branch.centralized.CentralizedManager; import xyz.auriium.branch.centralized.CentralizedManagerBinder; import xyz.auriium.branch.centralized.NodeSource; import xyz.auriium.branch.centralized.base.NodeBase; -import xyz.auriium.branch.centralized.typeadapter.ManagerAdapter; import xyz.auriium.branch.centralized.base.NodeBaseBuilder; +import xyz.auriium.branch.centralized.typeadapter.ManagerAdapter; import xyz.auriium.branch.fallback.strategies.OneBackStrategy; -import xyz.auriium.branch.interfacing.handlers.InterfacingHandler; -import xyz.auriium.branch.interfacing.handlers.MessageMap; import xyz.auriium.branch.nodes.CommandNode; import xyz.auriium.branch.spigot.adapter.SenderAdapter; -import xyz.auriium.branch.spigot.message.SpigotMessageMap; -import org.bukkit.command.CommandSender; -import org.bukkit.plugin.java.JavaPlugin; import java.util.HashSet; import java.util.Set; diff --git a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/adapter/PlayerAdapter.java b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/adapter/PlayerAdapter.java index 45fc21f..c897bd0 100644 --- a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/adapter/PlayerAdapter.java +++ b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/adapter/PlayerAdapter.java @@ -21,7 +21,7 @@ package xyz.auriium.branch.spigot.adapter; -import xyz.auriium.branch.anomalies.WrongTypeAnomaly; +import xyz.auriium.branch.interfacing.exceptional.anomalies.WrongTypeParseAnomaly; import xyz.auriium.branch.centralized.typeadapter.ManagerAdapter; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -43,8 +43,8 @@ public boolean canAdapt(CommandSender sender) { } @Override - public WrongTypeAnomaly failedParseResponse(CommandSender sender) { - return new WrongTypeAnomaly(Player.class, CommandSender.class); + public WrongTypeParseAnomaly failedParseResponse(CommandSender sender) { + return new WrongTypeParseAnomaly(Player.class, CommandSender.class); } diff --git a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/message/FormattedMessage.java b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/message/FormattedMessage.java deleted file mode 100644 index cc2385f..0000000 --- a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/message/FormattedMessage.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * - * Branch - * Copyright © 2021 Aurium - * - * Branch is free software: you can redistribute it and/or modify - * It under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * Branch is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Branch. If not, see - * and navigate to version 3 of the GNU Affero General Public License. - * - */ - -package xyz.auriium.branch.spigot.message; - -import xyz.auriium.branch.interfacing.Message; -import org.bukkit.command.CommandSender; - -public abstract class FormattedMessage implements Message { - - //TODO private final Formatter formatter; - - protected abstract void accept(C sender, String postFormatted); - - @Override - public void accept(C sender) { - - } -} diff --git a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/message/SpigotMessageMap.java b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/message/SpigotMessageMap.java deleted file mode 100644 index a6d83a0..0000000 --- a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/message/SpigotMessageMap.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * - * Branch - * Copyright © 2021 Aurium - * - * Branch is free software: you can redistribute it and/or modify - * It under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * Branch is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Branch. If not, see - * and navigate to version 3 of the GNU Affero General Public License. - * - */ - -package xyz.auriium.branch.spigot.message; - -import xyz.auriium.branch.interfacing.Anomaly; -import xyz.auriium.branch.interfacing.ResponseAction; -import xyz.auriium.branch.interfacing.handlers.DelegatingDefaultMap; -import xyz.auriium.branch.interfacing.handlers.InnerMap; -import xyz.auriium.branch.anomalies.WrongTypeAnomaly; -import org.bukkit.command.CommandSender; - -/** - * Spigot message defaults - * @param - */ -public class SpigotMessageMap extends DelegatingDefaultMap { - - @Override - public SpigotMessageMap add(Class key, ResponseAction action) { - return (SpigotMessageMap) super.add(key, action); - } - - @Override - protected InnerMap defaultMap() { - InnerMap map = new InnerMap<>(); - - map.add(WrongTypeAnomaly.class, response -> new TextMessage<>( - "Expected class: " + response.getExpectedClass().getName() + "Got class: " + response.getReceivedClass() - )); - - return map; - } -} diff --git a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/message/TextMessage.java b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/message/TextMessage.java deleted file mode 100644 index c5bcf7d..0000000 --- a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/message/TextMessage.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * - * Branch - * Copyright © 2021 Aurium - * - * Branch is free software: you can redistribute it and/or modify - * It under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * Branch is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Branch. If not, see - * and navigate to version 3 of the GNU Affero General Public License. - * - */ - -package xyz.auriium.branch.spigot.message; - -import xyz.auriium.branch.interfacing.Message; -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; - -public class TextMessage implements Message { - - private final String[] coloredStringToSend; - - public TextMessage(String... coloredStringToSend) { - this.coloredStringToSend = coloredStringToSend; - } - - @Override - public void accept(C sender) { - - for (String string : coloredStringToSend) { - sender.sendMessage(ChatColor.translateAlternateColorCodes('&',string)); - } - - } -} diff --git a/docs/.nojekyll b/docs/.nojekyll deleted file mode 100644 index e69de29..0000000 diff --git a/docs/README.md b/docs/README.md index a4d69e6..231a499 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,35 +1,33 @@ -# Branch +# Website -An opinionated command framework based around the concept of an argument handling node +This website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator. -Has support for both builder format and annotation format +## Installation -Built for use with Beetle but can be used independently - -## How can I ask for support? +```console +yarn install +``` -DM **Aesthetik#9784** on discord! +## Local Development -## Contributing +```console +yarn start +``` -Make pull requests that arent bad and I accept them. It's about that simple! +This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server. -## Repositories +## Build +```console +yarn build ``` - - - me.aurium - branch-core - 0.1.0 - - -``` -``` - - - aurium - https://repo.repsy.io/mvn/elytraforce/default - - + +This command generates static content into the `build` directory and can be served using any static contents hosting service. + +## Deployment + +```console +GIT_USER= USE_SSH=true yarn deploy ``` + +If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch. diff --git a/docs/_coverpage.md b/docs/_coverpage.md deleted file mode 100644 index 43ef131..0000000 --- a/docs/_coverpage.md +++ /dev/null @@ -1,13 +0,0 @@ -![logo](media/branch.png) - -# branch framework 1.0.0 - -> A powerful Java command framework - -- Versatile and object oriented -- Many implementations, including ones for Spigot and Velocity -- Annotations, or builder format -- Easy for beginners, flexible enough for experienced devs - -[Source](https://github.com/docsifyjs/docsify/) -[Get Started](#docsify) \ No newline at end of file diff --git a/docs/_sidebar.md b/docs/_sidebar.md deleted file mode 100644 index 98fcd8b..0000000 --- a/docs/_sidebar.md +++ /dev/null @@ -1,32 +0,0 @@ -- Branch Framework - - - [Introduction](README.md) - -- Getting Started - - - [Key Concepts](info/concepts.md) - - [Basic Example](info/example.md) - -- Nodes - - - [What is a node?](info/nodes.md) - - [The Argument Node](info/argumentnode.md) - - Other Nodes - - [The Single Node](info/singlenode.md) - - [The Branching Node](info/branchingnode.md) - - [The Help Node](info/helpnode.md) - - [Implementing your own](info/implementingnode.md) - -- Central - - - Core Management - - [The Centralized Manager](info/centralizedmanager.md) - - [Type Adapters](info/typeadapter.md) - - [Node Bases](info/nodebase.md) - - [Fallback Strategies](info/fallback.md) - - Messaging and Responses - - [Response Handling](info/responses.md) - - [Descriptions and Help](info/descriptions.md) - - - diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index de14ede..0000000 --- a/docs/index.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - - Branch Framework - - - - - - - -
- - - - - diff --git a/docs/media/branch.png b/docs/media/branch.png deleted file mode 100644 index f97d1f02ad15a7ce0e2dfbb8c1d6852339d1ac7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2008 zcmZ`)YcvxK7~a^L4UIO9+>))iw2XvJVwuaRxn*d=a-EM{TPVI!MDEunG{q8WZeJKB zB(dDer7u)&MJ4GXMETawetge4@B5tRJ@0eQd!9dUiapgz8nz1t005*Z)?`N!vwxQa zNYt5zm1ZIW`IC;30KlYD-Gu^Akrq2;YefcZUCQixAX1P>$}tPb8!!ZkM{$O9+C>v7 z3Yl~~YW!mfJqYP6|M>6L30$5>xx02FsM69r1>R$EtGmlO8?qzKLbaSs-tiEjduQ)e z`D~PDBDQR(3wfj*n4lrg9cqOA<6z^oL;cFOzck*B4+S?Rvd+c^#NRJ294IV|V8Ol` zhYUB&8^7M_D<(9p!w&y}OeLU;4b-XcXhIsoo73F+BT2(&XEa(KBXnH?a~^9|MQ30& z_GTJyK0Y(f3V6{?mSp(?#^Qdj32G8wsA zFKtbNu!}v8oU;pcUQEua41P{+{h z+?Ky|CA8a;m(#_}Y8>?va4B{bnhx0Z4>xPn8%8LCJYG04_{8Npx9+Sy1mdkXO=2r& ziWs~}x_HVD8qvqgr9$aNFG%)lS0qqIR&a(2g2iXd6rf5m?Uilm!nH zsyEZx3#zHhnjQ$^sQ(K`u6=cS0(JQq3`7XAj>5#>eeR{1F7&vN&itr6XL7%WG#fvp zqE$#zv8Z-BBojzgkcj1<+l{>0>$RyoujOylq4P~~PQHvP95WDC$o&>kpuXAe{IJ&% z5giC(_rqWNSZC~@PE;Lt_X{#e!B#x9pIrybp1W;VP}hKF4g2xNBAlM(Bw=(l4lZ0z z&l#|IYTn7n{?LOGWgv zBopP%{b9*YBQ4E@6J3gXi^`<+zHSA@medtk4R*P7(o`9s{?9Nq*$vqeZFc0vEjQV)8=YsM6KmQ>1bj1oVTKq;Lg4c0 z-53P9taor9gH4N@^W)zZPfdilUPZoi^F7}`^fSdyaa6$atO0x_6zd{e`dX~4*wN>; zYrqYsh2H1Fn*&^D zv>NTOKo5#BtYqmI_B>`X0lI8#EbwuCdppTDhRSA7Z+~sFD!%POtJj|RwUIh3*jg{( zeVf9(6h?l4DE#OKoHFe2;L5G`qZfAT#e&ufJ%d|9&>gs4`EgG&CT7|51g@hH_sZ@? zGZdD|{9Ybwbbs&cs&NJXQWGnQ7?pa~ZBXn~WN6mT-tWd&R?cBm?RfRY9;8+!Zq=uQ zYVAQnx2#cp+7h7QwRZbva$3=6aUamo#kMuzHKf^VU4k8~R40y&1rMQ2cbCXmfq0$~ z;p732gWn#(tt*ln66#xni_Ope-Y+~Z`M{ESX8q&=FmV=A?qt(Y>*MV2Aobgs53ptG zM=i6A&rtmCA#c*w@>S3a(>j)#yvu@4rNR25?esg&?Ro}Z(rVQ|R*Y5x^f-^<9MU!B zCL0t+*JOlymgon_SQw?MPQ_hzxIG+O@mYM*?y=HQ!BUy%yoqniiHcTVM!Vo^biu}j z#p!#B;AkeLk7&Ng>n*u4(glw?QMu8ymK=Nf{64kRX2hZ0$*QG%MB1?Mhx^N>ffSP>lnZBXwkH0ldWhs!PU)p5p$fj>sQl%l$dx#uPT?nJuJ z2wnMfGF`P)W`26bg_`tSr%scm:git:https://github.com/Auriium/Branch.git - - branch-core branch-spigot-impl + branch-adventure @@ -51,4 +50,14 @@ ${compiler.version} + + + + xyz.auriium + branch-core + 0.1.0 + + + + \ No newline at end of file From 543625eb41eda1a0a339a6337315b11506d2bd00 Mon Sep 17 00:00:00 2001 From: Matt Date: Wed, 28 Jul 2021 14:34:35 -0700 Subject: [PATCH 07/10] Resolve build failures --- pom.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pom.xml b/pom.xml index cb93dcf..5b6bda1 100644 --- a/pom.xml +++ b/pom.xml @@ -60,4 +60,11 @@
+ + + central-repo + https://repo.auriium.xyz/releases + + + \ No newline at end of file From 3860cb3b4c257b2ee5b636fbd3c00cb6e544ded6 Mon Sep 17 00:00:00 2001 From: Matt Date: Thu, 29 Jul 2021 17:38:36 -0700 Subject: [PATCH 08/10] Implement Block typing in anticipation of help scanning / syntax scanning Not sure if this is the best way of going about things but i'm hoping it will prove an invaluable decision on the path to ~~destroying ACF~~ finishing work on Branch in order to phase out other command frameworks in the organization. This commit also should phase out the use of blocks as a search argument - that's for strings: Instead, blocks are used as descriptive objects for help nodes and similar constructs to display information. Currently working on implementing tests, continuing work on arguments, and soon implementing the multiadapter and help node. Implementation of tests is extremely important to our future code quality and sustainability as it will allow for us to catch early bugs much faster as well as prototype and showcase working code. In the future, all pull requests for new features will require working tests with 60%+ test coverage. Additionally, in all additional projects i work on i will write tests alongside development as opposed to after completion since this is gonna be real tedious to do --- branch-core/pom.xml | 10 +- .../branch/centralized/NodeSource.java | 8 +- .../centralized/base/AbstractNodeBase.java | 22 ++-- .../centralized/base/DelegatingNodeBase.java | 8 +- .../centralized/base/NodeBaseBuilder.java | 18 ++-- .../branch/centralized/base/RunNodeBase.java | 6 +- .../information/description/Description.java | 1 + .../description/DescriptionContext.java | 10 ++ .../branch/execution/AbstractNodeContext.java | 75 ------------- .../xyz/auriium/branch/execution/Block.java | 57 +++++++++- .../auriium/branch/execution/BlockType.java | 20 +++- .../branch/execution/ContextProvider.java | 5 +- .../execution/DelegatingEnhancedContext.java | 39 +++++++ .../execution/EmptyExecutionHandler.java | 2 +- .../execution/EmptySuggestionHandler.java | 8 ++ .../branch/execution/EnhancedNodeContext.java | 9 ++ .../auriium/branch/execution/NodeContext.java | 8 +- .../auriium/branch/execution/StringBlock.java | 63 ----------- .../branch/execution/api/ArgExecution.java | 6 +- .../branch/execution/api/BasicExecution.java | 6 +- .../branch/execution/api/Execution.java | 2 - .../execution/api/ExecutionHandler.java | 4 +- .../execution/blocks/ArgumentBlock.java | 37 +++++++ .../execution/blocks/BracketPattern.java | 32 ++++++ .../execution/blocks/EndpointBlock.java | 33 ++++++ .../branch/execution/blocks/GroupBlock.java | 33 ++++++ .../fallback/permissions/EmptyPermission.java | 9 ++ .../strategies/FallbackSearchStrategy.java | 5 +- .../fallback/strategies/OneBackStrategy.java | 15 ++- .../strategies/PermissionLockoutStrategy.java | 17 +-- .../TooFewInputsInternalAnomaly.java | 11 +- .../exceptional/color/ColorMessage.java | 22 ---- .../color/ColorMessageController.java | 10 -- .../exceptional/color/ColorWorker.java | 24 ----- .../xyz/auriium/branch/nodes/CommandNode.java | 24 ++++- .../auriium/branch/nodes/EndpointNode.java | 21 ++-- .../auriium/branch/nodes/ProcessingNode.java | 27 +++++ .../branch/nodes/SimpleProcessingNode.java | 30 ++++++ .../nodes/argument/AbstractArgNode.java | 40 ++++--- .../branch/nodes/argument/ArgNode.java | 16 +-- .../argument/implement/DefaultingArgNode.java | 2 +- .../model/ContextualBaseArgument.java | 7 +- .../model/SingleContextualArgument.java | 4 +- .../nodes/argument/types/StringArgument.java | 33 ++++-- .../nodes/branching/BranchingBuilder.java | 4 + .../branch/nodes/branching/BranchingNode.java | 67 +++++++----- .../nodes/branching/CommonPreStoredList.java | 27 +++++ .../branching/ExclusiveBranchingBuilder.java | 81 -------------- .../branching/ExclusivePrestoredBuilder.java | 45 ++++++++ .../branching/ExclusivePrestoredSet.java | 27 ----- .../branching/InclusiveBranchingBuilder.java | 102 ------------------ .../branching/InclusivePreStoredBuilder.java | 51 +++++++++ .../branching/InclusivePrestoredSet.java | 32 ------ .../branch/nodes/branching/PreStoredList.java | 15 +++ .../branch/nodes/branching/PrestoredSet.java | 13 --- .../auriium/branch/nodes/help/HelpNode.java | 43 ++++---- .../results/DelegatingImmutableList.java | 61 +++++++++++ .../branch/nodes/results/ImmutableList.java | 92 ++++++++++++++++ .../branch/nodes/results/InitialSearch.java | 57 ++++++++++ .../nodes/results/PostProcessSearch.java | 55 ++++++++++ .../nodes/results/PreProcessSearch.java | 56 ++++++++++ .../branch/nodes/results/SearchInfo.java | 73 ------------- .../branch/nodes/results/SearchInput.java | 70 ------------ .../branch/nodes/results/SearchPair.java | 22 ++++ .../nodes/results/SearcherEquality.java | 12 +++ .../nodes/single/AbstractSingleNode.java | 16 ++- .../branch/nodes/single/SingleNode.java | 18 ++-- .../nodes/single/SingleNodeBuilder.java | 11 +- .../implement/DefaultingSingleNode.java | 10 +- branch-core/src/test/java/ExecutionTest.java | 22 +--- .../auriium/branch/tests/StringAdapter.java | 27 ----- .../auriium/branch/tests/StringManager.java | 70 ------------ .../branch/tests/centralized/MockAdapter.java | 6 ++ .../branch/tests/centralized/MockManager.java | 49 +++++++++ .../branch/tests/centralized/MockSender.java | 12 +++ .../branch/tests/execution/BlockIT.java | 4 + .../tests/interfacing/MessageBossTest.java | 4 + .../tests/node/single/SingleNodeIT.java | 5 + .../node/single/SingleNodeSearcherTest.java | 5 + .../tests/node/utility/ImmutableListTest.java | 60 +++++++++++ .../tests/node/utility/MockAnomaly.java | 12 +++ .../branch/tests/node/utility/ResultTest.java | 27 +++++ .../auriium/branch/spigot/SpigotContext.java | 2 - .../branch/spigot/SpigotContextProvider.java | 1 - docs/README.md | 33 ------ pom.xml | 18 ++++ 86 files changed, 1303 insertions(+), 953 deletions(-) create mode 100644 branch-core/src/main/java/xyz/auriium/branch/centralized/information/description/DescriptionContext.java delete mode 100644 branch-core/src/main/java/xyz/auriium/branch/execution/AbstractNodeContext.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/execution/DelegatingEnhancedContext.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/execution/EnhancedNodeContext.java delete mode 100644 branch-core/src/main/java/xyz/auriium/branch/execution/StringBlock.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/execution/blocks/ArgumentBlock.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/execution/blocks/BracketPattern.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/execution/blocks/EndpointBlock.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/execution/blocks/GroupBlock.java delete mode 100644 branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/color/ColorMessage.java delete mode 100644 branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/color/ColorMessageController.java delete mode 100644 branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/color/ColorWorker.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/ProcessingNode.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/SimpleProcessingNode.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/branching/BranchingBuilder.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/branching/CommonPreStoredList.java delete mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/branching/ExclusiveBranchingBuilder.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/branching/ExclusivePrestoredBuilder.java delete mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/branching/ExclusivePrestoredSet.java delete mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/branching/InclusiveBranchingBuilder.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/branching/InclusivePreStoredBuilder.java delete mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/branching/InclusivePrestoredSet.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/branching/PreStoredList.java delete mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/branching/PrestoredSet.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/results/DelegatingImmutableList.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/results/ImmutableList.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/results/InitialSearch.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/results/PostProcessSearch.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/results/PreProcessSearch.java delete mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/results/SearchInfo.java delete mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/results/SearchInput.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/results/SearchPair.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/results/SearcherEquality.java delete mode 100644 branch-core/src/test/java/xyz/auriium/branch/tests/StringAdapter.java delete mode 100644 branch-core/src/test/java/xyz/auriium/branch/tests/StringManager.java create mode 100644 branch-core/src/test/java/xyz/auriium/branch/tests/centralized/MockAdapter.java create mode 100644 branch-core/src/test/java/xyz/auriium/branch/tests/centralized/MockManager.java create mode 100644 branch-core/src/test/java/xyz/auriium/branch/tests/centralized/MockSender.java create mode 100644 branch-core/src/test/java/xyz/auriium/branch/tests/execution/BlockIT.java create mode 100644 branch-core/src/test/java/xyz/auriium/branch/tests/interfacing/MessageBossTest.java create mode 100644 branch-core/src/test/java/xyz/auriium/branch/tests/node/single/SingleNodeIT.java create mode 100644 branch-core/src/test/java/xyz/auriium/branch/tests/node/single/SingleNodeSearcherTest.java create mode 100644 branch-core/src/test/java/xyz/auriium/branch/tests/node/utility/ImmutableListTest.java create mode 100644 branch-core/src/test/java/xyz/auriium/branch/tests/node/utility/MockAnomaly.java create mode 100644 branch-core/src/test/java/xyz/auriium/branch/tests/node/utility/ResultTest.java delete mode 100644 docs/README.md diff --git a/branch-core/pom.xml b/branch-core/pom.xml index b6770e1..c9fdd25 100644 --- a/branch-core/pom.xml +++ b/branch-core/pom.xml @@ -41,8 +41,14 @@ org.slf4j slf4j-api - 1.7.32 - test + + + org.junit.jupiter + junit-jupiter-engine + + + org.junit.jupiter + junit-jupiter-params
diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/NodeSource.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/NodeSource.java index 58c95ee..cdb9b7b 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/NodeSource.java +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/NodeSource.java @@ -3,17 +3,15 @@ import xyz.auriium.branch.execution.api.ExecutionHandler; import xyz.auriium.branch.fallback.permissions.Permission; import xyz.auriium.branch.centralized.information.description.Description; -import xyz.auriium.branch.nodes.branching.ExclusiveBranchingBuilder; -import xyz.auriium.branch.nodes.branching.InclusiveBranchingBuilder; +import xyz.auriium.branch.nodes.branching.BranchingBuilder; import xyz.auriium.branch.nodes.single.SingleNode; import xyz.auriium.branch.nodes.single.SingleNodeBuilder; public interface NodeSource { SingleNodeBuilder single(); - InclusiveBranchingBuilder inclusiveBranching(); - ExclusiveBranchingBuilder exclusiveBranching(); - //TODO help and argument + BranchingBuilder branch(); + //TODO argument SingleNode singleNode(String literal, ExecutionHandler handler); diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/base/AbstractNodeBase.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/base/AbstractNodeBase.java index cdb787c..47fdf79 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/base/AbstractNodeBase.java +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/base/AbstractNodeBase.java @@ -28,7 +28,8 @@ import xyz.auriium.branch.fallback.strategies.FallbackSearchStrategy; import xyz.auriium.branch.interfacing.exceptional.AnomalyHandler; import xyz.auriium.branch.nodes.CommandNode; -import xyz.auriium.branch.nodes.results.SearchInfo; +import xyz.auriium.branch.nodes.results.PreProcessSearch; +import xyz.auriium.branch.nodes.results.SearcherEquality; import xyz.auriium.branch.nodes.results.model.Result; import java.util.List; @@ -40,20 +41,21 @@ */ public abstract class AbstractNodeBase implements NodeBase { - private final ManagerAdapter adapter; private final AnomalyHandler handler; private final CommandNode baseNode; private final FallbackSearchStrategy strategy; private final ContextProvider provider; + private final SearcherEquality equality; - protected AbstractNodeBase(ManagerAdapter adapter, AnomalyHandler handler, CommandNode baseNode, FallbackSearchStrategy strategy, ContextProvider provider) { + protected AbstractNodeBase(ManagerAdapter adapter, AnomalyHandler handler, CommandNode baseNode, FallbackSearchStrategy strategy, ContextProvider provider, SearcherEquality equality) { this.adapter = adapter; this.handler = handler; this.baseNode = baseNode; this.strategy = strategy; this.provider = provider; + this.equality = equality; } @@ -78,21 +80,21 @@ public void execute(I input, String alias, String[] args) { A adaptedSender = adapter.adapt(input); - Result> result = strategy.attemptPreprocess(adaptedSender,alias,args,baseNode); + Result> preprocessResult = strategy.attemptPreprocess(adaptedSender, alias, args, equality, baseNode); - if (!result.isSuccessful()) { - handler.communicateAdapted(adaptedSender, result.getFailure()); + if (!preprocessResult.isSuccessful()) { + handler.communicateAdapted(adaptedSender, preprocessResult.getFailure()); return; } - SearchInfo info = result.getSuccess(); - NodeContext produced = provider.produce(adaptedSender,alias,args,baseNode,info); + PreProcessSearch info = preprocessResult.getSuccess(); + NodeContext produced = provider.produce(adaptedSender, alias, args); - Result> executionResult = info.resultingNode().getExecution(produced); + Result> executionResult = info.getFoundNode().searchExecute(produced, info); if (!executionResult.isSuccessful()) { - handler.communicateAdapted(adaptedSender, result.getFailure()); + handler.communicateAdapted(adaptedSender, preprocessResult.getFailure()); return; } diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/base/DelegatingNodeBase.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/base/DelegatingNodeBase.java index 9826e5e..6f6c9d6 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/base/DelegatingNodeBase.java +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/base/DelegatingNodeBase.java @@ -7,6 +7,7 @@ import xyz.auriium.branch.interfacing.exceptional.AnomalyHandler; import xyz.auriium.branch.nodes.CommandNode; import xyz.auriium.branch.nodes.IdentifiableNode; +import xyz.auriium.branch.nodes.results.SearcherEquality; /** * Adapting node base that delegates identifier calls to the first node in the base stack. @@ -15,13 +16,12 @@ public class DelegatingNodeBase extends RunNodeBase { private final IdentifiableNode baseNode; - protected DelegatingNodeBase(ManagerAdapter adapter, AnomalyHandler handler, IdentifiableNode baseNode, FallbackSearchStrategy strategy, ContextProvider provider) { - super(adapter, handler, baseNode, strategy, provider); + public DelegatingNodeBase(ManagerAdapter adapter, AnomalyHandler handler, IdentifiableNode baseNode, FallbackSearchStrategy strategy, ContextProvider provider, SearcherEquality equality) { + super(adapter, handler, baseNode, strategy, provider, equality); this.baseNode = baseNode; } - @Override public Description getDescription() { return baseNode.getDescription(); @@ -29,6 +29,6 @@ public Description getDescription() { @Override public String getIdentifier() { - return baseNode.getIdentifier().getIdentifier(); + return baseNode.getIdentifier().getLabel(); } } diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/base/NodeBaseBuilder.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/base/NodeBaseBuilder.java index 9e06bd2..2754fa6 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/base/NodeBaseBuilder.java +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/base/NodeBaseBuilder.java @@ -27,6 +27,7 @@ import xyz.auriium.branch.fallback.strategies.FallbackSearchStrategy; import xyz.auriium.branch.interfacing.exceptional.AnomalyHandler; import xyz.auriium.branch.nodes.IdentifiableNode; +import xyz.auriium.branch.nodes.results.SearcherEquality; import java.util.*; @@ -46,18 +47,20 @@ public class NodeBaseBuilder { private IdentifiableNode node; private FallbackSearchStrategy strategy; private ContextProvider provider; + private SearcherEquality equality; public NodeBaseBuilder(CentralizedManager manager, ManagerAdapter adapter) { this.manager = manager; this.adapter = adapter; } - public NodeBaseBuilder(CentralizedManager manager, ManagerAdapter adapter, FallbackSearchStrategy strategy, ContextProvider provider, AnomalyHandler handler) { + public NodeBaseBuilder(CentralizedManager manager, ManagerAdapter adapter, FallbackSearchStrategy strategy, ContextProvider provider, AnomalyHandler handler, SearcherEquality equality) { this.manager = manager; this.adapter = adapter; this.strategy = strategy; this.provider = provider; this.handler = handler; + this.equality = equality; } public NodeBaseBuilder withNode(IdentifiableNode node) { @@ -84,12 +87,15 @@ public NodeBaseBuilder customInterfacing(AnomalyHandler handler) { return this; } + + public void finish() { - Objects.requireNonNull(node); - Objects.requireNonNull(strategy); - Objects.requireNonNull(provider); - Objects.requireNonNull(handler); + Objects.requireNonNull(node, "Node cannot be null!"); + Objects.requireNonNull(strategy, "Strategy cannot be null!"); + Objects.requireNonNull(provider, "Provider cannot be null!"); + Objects.requireNonNull(handler, "AnomalyHandler cannot be null!"); + Objects.requireNonNull(equality, "SearcherEquality cannot be null!"); - manager.newCommand(new DelegatingNodeBase<>(adapter,handler,node,strategy,provider)); + manager.newCommand(new DelegatingNodeBase<>(adapter,handler,node,strategy,provider,equality)); } } diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/base/RunNodeBase.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/base/RunNodeBase.java index 3d84ecb..a118b65 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/base/RunNodeBase.java +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/base/RunNodeBase.java @@ -6,6 +6,7 @@ import xyz.auriium.branch.fallback.strategies.FallbackSearchStrategy; import xyz.auriium.branch.interfacing.exceptional.AnomalyHandler; import xyz.auriium.branch.nodes.CommandNode; +import xyz.auriium.branch.nodes.results.SearcherEquality; /** * Nodebase that simply runs the execution runnable @@ -14,9 +15,8 @@ */ public abstract class RunNodeBase extends AbstractNodeBase { - - protected RunNodeBase(ManagerAdapter adapter, AnomalyHandler handler, CommandNode baseNode, FallbackSearchStrategy strategy, ContextProvider provider) { - super(adapter, handler, baseNode, strategy, provider); + protected RunNodeBase(ManagerAdapter adapter, AnomalyHandler handler, CommandNode baseNode, FallbackSearchStrategy strategy, ContextProvider provider, SearcherEquality equality) { + super(adapter, handler, baseNode, strategy, provider, equality); } @Override diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/information/description/Description.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/information/description/Description.java index d858bbd..6491af0 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/information/description/Description.java +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/information/description/Description.java @@ -21,6 +21,7 @@ package xyz.auriium.branch.centralized.information.description; +//TODO make functional interface in order to generate str public interface Description { String getTextDescription(); diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/information/description/DescriptionContext.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/information/description/DescriptionContext.java new file mode 100644 index 0000000..2f335fa --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/centralized/information/description/DescriptionContext.java @@ -0,0 +1,10 @@ +package xyz.auriium.branch.centralized.information.description; + +/** + * everything a description needs (this node name, etc etc etc etc) + * + * Calls to node.getDescription should return a **STRING**, this object should not be known by the api at large and instead + * should be considered an object used in order to act as a transport for description message orders. + */ +public class DescriptionContext { +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/AbstractNodeContext.java b/branch-core/src/main/java/xyz/auriium/branch/execution/AbstractNodeContext.java deleted file mode 100644 index 552ab30..0000000 --- a/branch-core/src/main/java/xyz/auriium/branch/execution/AbstractNodeContext.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * - * Branch - * Copyright © 2021 Aurium - * - * Branch is free software: you can redistribute it and/or modify - * It under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * Branch is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Branch. If not, see - * and navigate to version 3 of the GNU Affero General Public License. - * - */ - -package xyz.auriium.branch.execution; - - -import xyz.auriium.branch.nodes.CommandNode; -import xyz.auriium.branch.nodes.results.SearchInfo; - -/** - * Abstract implementation of a node context - * @param type - */ -public abstract class AbstractNodeContext implements NodeContext { - - private final T sender; - private final String alias; - private final String[] args; - - private final CommandNode baseNode; - private final SearchInfo searchInfo; - - protected AbstractNodeContext(T sender, String alias, String[] args, CommandNode baseNode, SearchInfo result) { - this.sender = sender; - this.alias = alias; - this.args = args; - - this.searchInfo = result; - this.baseNode = baseNode; - } - - @Override - public T getSender() { - return sender; - } - - @Override - public String getAlias() { - return alias; - } - - @Override - public String[] getArgs() { - return args; - } - - @Override - public CommandNode getBaseExecutedNode() { - return baseNode; - } - - @Override - public SearchInfo getResults() { - return searchInfo; - } - -} diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/Block.java b/branch-core/src/main/java/xyz/auriium/branch/execution/Block.java index deba171..a53815e 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/execution/Block.java +++ b/branch-core/src/main/java/xyz/auriium/branch/execution/Block.java @@ -21,15 +21,66 @@ package xyz.auriium.branch.execution; +import xyz.auriium.branch.execution.blocks.BracketPattern; + /** * Represents a Branch-provided identification structure for the identifier of specific structures */ public interface Block { - String getIdentifier(); - BlockType getType(); + /** + * Gets the literal identifier of the block + * + * If the object is an endpoint block "join" of /kitpvp join, the identifier is "join" + * (pretty obvious) + * @return the identifier + */ + String getLabel(); + + /** + * Gets the prettified "version" of the block used to display it + * + * If the object is an endpoint block "join" of /kitpvp join, + * the prettified identifier will be "" + * + * @return the pretty string alone + */ + default String getPretty() { + return getBracketPattern().parse(getLabel()); + } + + /** + * Gets identifier and type wrapped with prettified bracketing + * + * If the object is an endpoint block "join" of /kitpvp join, the + * prettified + type string is "" + * + * @return the prettified string + */ + default String getPrettyAndType() { + return getBracketPattern().parse(String.format("%s:%s", getType(), getLabel())); + } + + /** + * Gets just the type string used for this object. Typically delegates to {@link #getTypeObject()} except + * for argument blocks, in which case + * @return the type + */ + String getType(); + + /** + * Returns a bracket pattern for use with {@link #getPretty()} + * @return returns the bracket pattern + */ + BracketPattern getBracketPattern(); + + /** + * Gets the blocktype this belongs to + * @return the blocktype + */ + BlockType getTypeObject(); default boolean matches(String string) { - return getIdentifier().equalsIgnoreCase(string); + return getLabel().equalsIgnoreCase(string); } } diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/BlockType.java b/branch-core/src/main/java/xyz/auriium/branch/execution/BlockType.java index 272e834..c69c12b 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/execution/BlockType.java +++ b/branch-core/src/main/java/xyz/auriium/branch/execution/BlockType.java @@ -2,12 +2,22 @@ public enum BlockType { - INPUT, + INPUT("input"), - LITERAL_COMMAND, //used only to identify the string representing the root of a command e.g. command in /command group [bar] - LITERAL_GROUP, //used for blocks representing a subgroup's identifier e.g. group in /command group [bar] - ARGUMENT_OPTIONAL, //used for blocks representing a command's optional argument e.g. bar in /command group [bar] - ARGUMENT_REQUIRED //used for blocks representing a required argument e.g. foo in /command group [bar] + LITERAL_GROUP("subgroup"), //used for blocks representing a subgroup's identifier e.g. group in /command group [bar] + LITERAL_ENDPOINT("endpoint"), //used for blocks representing an endpoint command's identifier e.g. help or join in /command help or /command kitpvp join + ARGUMENT_OPTIONAL("optional"), //used for blocks representing a command's optional argument e.g. bar in /command group [bar] + ARGUMENT_REQUIRED("required"), //used for blocks representing a required argument e.g. foo in /command group [bar] + LITERAL_CUSTOM("custom"); //for framework-user implemented blocks (why?) + String readable; + + BlockType(String humanReadable) { + readable = humanReadable; + } + + public String getReadable() { + return readable; + } } diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/ContextProvider.java b/branch-core/src/main/java/xyz/auriium/branch/execution/ContextProvider.java index c542196..bcf27c7 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/execution/ContextProvider.java +++ b/branch-core/src/main/java/xyz/auriium/branch/execution/ContextProvider.java @@ -21,14 +21,11 @@ package xyz.auriium.branch.execution; -import xyz.auriium.branch.nodes.CommandNode; -import xyz.auriium.branch.nodes.results.SearchInfo; - /** * Represents something that produces specific context based on a platform */ public interface ContextProvider { - NodeContext produce(T sender, String alias, String[] strings, CommandNode baseNode, SearchInfo search); + NodeContext produce(T sender, String alias, String[] strings); } diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/DelegatingEnhancedContext.java b/branch-core/src/main/java/xyz/auriium/branch/execution/DelegatingEnhancedContext.java new file mode 100644 index 0000000..c36bcbb --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/execution/DelegatingEnhancedContext.java @@ -0,0 +1,39 @@ +package xyz.auriium.branch.execution; + +import xyz.auriium.branch.nodes.results.PostProcessSearch; + +public class DelegatingEnhancedContext implements EnhancedNodeContext { + + private final NodeContext delegate; + private final PostProcessSearch search; + + public DelegatingEnhancedContext(NodeContext delegate, PostProcessSearch search) { + this.delegate = delegate; + this.search = search; + } + + @Override + public T getSender() { + return delegate.getSender(); + } + + @Override + public String getAlias() { + return delegate.getAlias(); + } + + @Override + public String[] getArgs() { + return delegate.getArgs(); + } + + @Override + public boolean hasStringPermissible(String string) { + return delegate.hasStringPermissible(string); + } + + @Override + public PostProcessSearch getProcessedSearch() { + return search; + } +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/EmptyExecutionHandler.java b/branch-core/src/main/java/xyz/auriium/branch/execution/EmptyExecutionHandler.java index b1b7f12..8597c35 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/execution/EmptyExecutionHandler.java +++ b/branch-core/src/main/java/xyz/auriium/branch/execution/EmptyExecutionHandler.java @@ -25,7 +25,7 @@ public class EmptyExecutionHandler implements ExecutionHandler { @Override - public void handle(NodeContext adapter) { + public void handle(EnhancedNodeContext adapter) { } } diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/EmptySuggestionHandler.java b/branch-core/src/main/java/xyz/auriium/branch/execution/EmptySuggestionHandler.java index 27dc2af..c194cd6 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/execution/EmptySuggestionHandler.java +++ b/branch-core/src/main/java/xyz/auriium/branch/execution/EmptySuggestionHandler.java @@ -28,10 +28,18 @@ public class EmptySuggestionHandler implements SuggestionHandler { + EmptySuggestionHandler() {} + private static final List empty = new ArrayList<>(); + private static final EmptySuggestionHandler INSTANCE = new EmptySuggestionHandler<>(); @Override public List handle(NodeContext adapter) { return empty; } + + @SuppressWarnings("unchecked") + public static EmptySuggestionHandler instance() { + return (EmptySuggestionHandler) INSTANCE; + } } diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/EnhancedNodeContext.java b/branch-core/src/main/java/xyz/auriium/branch/execution/EnhancedNodeContext.java new file mode 100644 index 0000000..a5591e2 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/execution/EnhancedNodeContext.java @@ -0,0 +1,9 @@ +package xyz.auriium.branch.execution; + +import xyz.auriium.branch.nodes.results.PostProcessSearch; + +public interface EnhancedNodeContext extends NodeContext { + + PostProcessSearch getProcessedSearch(); + +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/NodeContext.java b/branch-core/src/main/java/xyz/auriium/branch/execution/NodeContext.java index ca2bbff..978dee9 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/execution/NodeContext.java +++ b/branch-core/src/main/java/xyz/auriium/branch/execution/NodeContext.java @@ -21,10 +21,6 @@ package xyz.auriium.branch.execution; -import xyz.auriium.branch.interfacing.exceptional.Anomaly; -import xyz.auriium.branch.nodes.CommandNode; -import xyz.auriium.branch.nodes.results.SearchInfo; - /** * Represents the in-context of an executed command -> Basically, all the important information gleaned from the execution of a command @@ -35,7 +31,7 @@ public interface NodeContext { /** * Gets the parsed sender object used by this object - * @return + * @return the sender object */ T getSender(); @@ -45,8 +41,6 @@ public interface NodeContext { */ String getAlias(); String[] getArgs(); - CommandNode getBaseExecutedNode(); - SearchInfo getResults(); /** * Gets whether the context's delegating sender has access to a permission. On some platforms, this may always be false. diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/StringBlock.java b/branch-core/src/main/java/xyz/auriium/branch/execution/StringBlock.java deleted file mode 100644 index 10b903c..0000000 --- a/branch-core/src/main/java/xyz/auriium/branch/execution/StringBlock.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * - * Branch - * Copyright © 2021 Aurium - * - * Branch is free software: you can redistribute it and/or modify - * It under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * Branch is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Branch. If not, see - * and navigate to version 3 of the GNU Affero General Public License. - * - */ - -package xyz.auriium.branch.execution; - -/** - * Represents a block that contains a string - */ -public class StringBlock implements Block { - - private final String identifier; - - public StringBlock(String identifier) { - this.identifier = identifier; - } - - @Override - public String getIdentifier() { - return identifier; - } - - @Override - public BlockType getType() { - return BlockType.INPUT; /// FIXME: 7/28/2021 replace this entire class with specialized blocks (potentially with actual node refs) - } - - public static Block of(String string) { - if (string.contains(" ")) throw new IllegalStateException("Identifier cannot have spaces!"); - - return new StringBlock(string); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - StringBlock that = (StringBlock) o; - return identifier.equalsIgnoreCase(that.identifier); - } - - @Override - public int hashCode() { - return identifier.hashCode(); - } -} diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/api/ArgExecution.java b/branch-core/src/main/java/xyz/auriium/branch/execution/api/ArgExecution.java index 593fcaf..2a74352 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/execution/api/ArgExecution.java +++ b/branch-core/src/main/java/xyz/auriium/branch/execution/api/ArgExecution.java @@ -1,6 +1,6 @@ package xyz.auriium.branch.execution.api; -import xyz.auriium.branch.execution.NodeContext; +import xyz.auriium.branch.execution.EnhancedNodeContext; import xyz.auriium.branch.nodes.argument.ArgumentContext; import xyz.auriium.branch.nodes.argument.ArgumentContextHandler; import xyz.auriium.branch.nodes.argument.Arguments; @@ -8,10 +8,10 @@ public class ArgExecution implements Execution { private final ArgumentContextHandler handler; - private final NodeContext node; + private final EnhancedNodeContext node; private final Arguments arguments; - public ArgExecution(ArgumentContextHandler handler, NodeContext node, Arguments arguments) { + public ArgExecution(ArgumentContextHandler handler, EnhancedNodeContext node, Arguments arguments) { this.handler = handler; this.node = node; this.arguments = arguments; diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/api/BasicExecution.java b/branch-core/src/main/java/xyz/auriium/branch/execution/api/BasicExecution.java index be961a1..416240d 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/execution/api/BasicExecution.java +++ b/branch-core/src/main/java/xyz/auriium/branch/execution/api/BasicExecution.java @@ -1,13 +1,13 @@ package xyz.auriium.branch.execution.api; -import xyz.auriium.branch.execution.NodeContext; +import xyz.auriium.branch.execution.EnhancedNodeContext; public class BasicExecution implements Execution { private final ExecutionHandler handler; - private final NodeContext node; + private final EnhancedNodeContext node; - public BasicExecution(ExecutionHandler handler, NodeContext node) { + public BasicExecution(ExecutionHandler handler, EnhancedNodeContext node) { this.handler = handler; this.node = node; } diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/api/Execution.java b/branch-core/src/main/java/xyz/auriium/branch/execution/api/Execution.java index 93b30f2..1eee634 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/execution/api/Execution.java +++ b/branch-core/src/main/java/xyz/auriium/branch/execution/api/Execution.java @@ -21,8 +21,6 @@ package xyz.auriium.branch.execution.api; -import xyz.auriium.branch.execution.NodeContext; - /** * Marker runnable representing the supplying of all required dependencies to an execution handler * or significant derivative and actual execution of said handler. diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/api/ExecutionHandler.java b/branch-core/src/main/java/xyz/auriium/branch/execution/api/ExecutionHandler.java index 480ed8d..7be418c 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/execution/api/ExecutionHandler.java +++ b/branch-core/src/main/java/xyz/auriium/branch/execution/api/ExecutionHandler.java @@ -21,7 +21,7 @@ package xyz.auriium.branch.execution.api; -import xyz.auriium.branch.execution.NodeContext; +import xyz.auriium.branch.execution.EnhancedNodeContext; /** * Functional interface typically used in simple nodes that only need to do one action @@ -30,6 +30,6 @@ @FunctionalInterface public interface ExecutionHandler { - void handle(NodeContext context); + void handle(EnhancedNodeContext context); } diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/blocks/ArgumentBlock.java b/branch-core/src/main/java/xyz/auriium/branch/execution/blocks/ArgumentBlock.java new file mode 100644 index 0000000..19db11a --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/execution/blocks/ArgumentBlock.java @@ -0,0 +1,37 @@ +package xyz.auriium.branch.execution.blocks; + +import xyz.auriium.branch.execution.Block; +import xyz.auriium.branch.execution.BlockType; + +public class ArgumentBlock implements Block { + + private final String label; + private final String argumentType; + private final boolean isOptional; + + public ArgumentBlock(String label, String argumentType, boolean isOptional) { + this.label = label; + this.argumentType = argumentType; + this.isOptional = isOptional; + } + + @Override + public String getLabel() { + return label; + } + + @Override + public String getType() { + return argumentType; + } + + @Override + public BracketPattern getBracketPattern() { + return isOptional ? new BracketPattern('<','>') : new BracketPattern('[',']'); + } + + @Override + public BlockType getTypeObject() { + return isOptional ? BlockType.ARGUMENT_OPTIONAL : BlockType.ARGUMENT_REQUIRED; + } +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/blocks/BracketPattern.java b/branch-core/src/main/java/xyz/auriium/branch/execution/blocks/BracketPattern.java new file mode 100644 index 0000000..34f05f4 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/execution/blocks/BracketPattern.java @@ -0,0 +1,32 @@ +package xyz.auriium.branch.execution.blocks; + +public class BracketPattern { + + private final Character startChar; + private final Character closeChar; + + public BracketPattern(Character startChar, Character closeChar) { + this.startChar = startChar; + this.closeChar = closeChar; + } + + public String parse(String input) { + StringBuilder builder = new StringBuilder(); + + if (startChar != null) { + builder.append(startChar); + } + + builder.append(input); + + if (closeChar != null) { + builder.append(closeChar); + } + + return builder.toString(); + } + + public static BracketPattern empty() { + return new BracketPattern(null, null); + } +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/blocks/EndpointBlock.java b/branch-core/src/main/java/xyz/auriium/branch/execution/blocks/EndpointBlock.java new file mode 100644 index 0000000..c7a43da --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/execution/blocks/EndpointBlock.java @@ -0,0 +1,33 @@ +package xyz.auriium.branch.execution.blocks; + +import xyz.auriium.branch.execution.Block; +import xyz.auriium.branch.execution.BlockType; + +public class EndpointBlock implements Block { + + private final String endpointIdentifier; + + public EndpointBlock(String endpointIdentifier) { + this.endpointIdentifier = endpointIdentifier; + } + + @Override + public String getLabel() { + return endpointIdentifier; + } + + @Override + public String getType() { + return BlockType.LITERAL_ENDPOINT.getReadable(); + } + + @Override + public BracketPattern getBracketPattern() { + return BracketPattern.empty(); + } + + @Override + public BlockType getTypeObject() { + return BlockType.LITERAL_ENDPOINT; + } +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/blocks/GroupBlock.java b/branch-core/src/main/java/xyz/auriium/branch/execution/blocks/GroupBlock.java new file mode 100644 index 0000000..650f1e6 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/execution/blocks/GroupBlock.java @@ -0,0 +1,33 @@ +package xyz.auriium.branch.execution.blocks; + +import xyz.auriium.branch.execution.Block; +import xyz.auriium.branch.execution.BlockType; + +public class GroupBlock implements Block { + + private final String groupName; + + public GroupBlock(String groupName) { + this.groupName = groupName; + } + + @Override + public String getLabel() { + return groupName; + } + + @Override + public String getType() { + return BlockType.LITERAL_GROUP.getReadable(); + } + + @Override + public BracketPattern getBracketPattern() { + return BracketPattern.empty(); + } + + @Override + public BlockType getTypeObject() { + return BlockType.LITERAL_GROUP; + } +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/fallback/permissions/EmptyPermission.java b/branch-core/src/main/java/xyz/auriium/branch/fallback/permissions/EmptyPermission.java index baab6ea..12ac124 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/fallback/permissions/EmptyPermission.java +++ b/branch-core/src/main/java/xyz/auriium/branch/fallback/permissions/EmptyPermission.java @@ -27,6 +27,10 @@ */ public class EmptyPermission implements Permission { + private static final EmptyPermission INSTANCE = new EmptyPermission<>(); + + EmptyPermission() {} + @Override public boolean attempt(T sender, String alias, String[] args) { return true; @@ -36,4 +40,9 @@ public boolean attempt(T sender, String alias, String[] args) { public String failureIdentifiableName() { return "None"; } + + @SuppressWarnings("unchecked") + public static EmptyPermission instance() { + return (EmptyPermission) INSTANCE; + } } diff --git a/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/FallbackSearchStrategy.java b/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/FallbackSearchStrategy.java index a75bf6c..65b436a 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/FallbackSearchStrategy.java +++ b/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/FallbackSearchStrategy.java @@ -22,7 +22,8 @@ package xyz.auriium.branch.fallback.strategies; import xyz.auriium.branch.nodes.CommandNode; -import xyz.auriium.branch.nodes.results.SearchInfo; +import xyz.auriium.branch.nodes.results.PreProcessSearch; +import xyz.auriium.branch.nodes.results.SearcherEquality; import xyz.auriium.branch.nodes.results.model.Result; /** @@ -35,7 +36,7 @@ public interface FallbackSearchStrategy { - Result> attemptPreprocess(T sender, String alias, String[] args, CommandNode baseNode); + Result> attemptPreprocess(T sender, String alias, String[] args, SearcherEquality equality, CommandNode baseNode); } diff --git a/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/OneBackStrategy.java b/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/OneBackStrategy.java index e5c3a00..806acdd 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/OneBackStrategy.java +++ b/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/OneBackStrategy.java @@ -23,8 +23,7 @@ import xyz.auriium.branch.interfacing.exceptional.anomalies.NoPermissionAnomaly; import xyz.auriium.branch.nodes.CommandNode; -import xyz.auriium.branch.nodes.results.SearchInput; -import xyz.auriium.branch.nodes.results.SearchInfo; +import xyz.auriium.branch.nodes.results.*; import xyz.auriium.branch.nodes.results.model.Result; /** @@ -54,22 +53,22 @@ public class OneBackStrategy implements FallbackSearchStrategy { @Override - public Result> attemptPreprocess(T sender, String alias, String[] args, CommandNode baseNode) { + public Result> attemptPreprocess(T sender, String alias, String[] args, SearcherEquality equality, CommandNode baseNode) { - SearchInput input = SearchInput.of(args); - Result> toBeExecuted = baseNode.getSpecificNode(input); + InitialSearch search = InitialSearch.of(equality, args); + Result> toBeExecuted = baseNode.searchNode(search); //1. Check permissions and access (preprocessing) - while (toBeExecuted.isSuccessful() && !toBeExecuted.getSuccess().resultingNode().getPermission().attempt(sender, alias, args)) { + while (toBeExecuted.isSuccessful() && !toBeExecuted.getSuccess().getFoundNode().getPermission().attempt(sender, alias, args)) { //something is wrong with the execution (e.g. wrong args or you did something bad), pass above one. - if (toBeExecuted.getSuccess().resultingNode().equals(baseNode)) { + if (toBeExecuted.getSuccess().getFoundNode().equals(baseNode)) { return Result.fail(new NoPermissionAnomaly(baseNode.getPermission().failureIdentifiableName())); } else { - toBeExecuted = baseNode.getSpecificNode(input.withoutTop()); //regress backwards a node + toBeExecuted = baseNode.searchNode(search = InitialSearch.withoutTop(search)); //regress backwards a node //TODO fix all of this } } diff --git a/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/PermissionLockoutStrategy.java b/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/PermissionLockoutStrategy.java index 306d1d9..793a609 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/PermissionLockoutStrategy.java +++ b/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/PermissionLockoutStrategy.java @@ -23,24 +23,27 @@ import xyz.auriium.branch.interfacing.exceptional.anomalies.NoPermissionAnomaly; import xyz.auriium.branch.nodes.CommandNode; -import xyz.auriium.branch.nodes.results.SearchInfo; -import xyz.auriium.branch.nodes.results.SearchInput; +import xyz.auriium.branch.nodes.results.*; import xyz.auriium.branch.nodes.results.model.Result; +import java.util.ArrayList; + /** * Simple fallback strategy that if the sender has no permission to execute the command they are sent a failing response. * @param */ public class PermissionLockoutStrategy implements FallbackSearchStrategy { + @Override - public Result> attemptPreprocess(T sender, String alias, String[] args, CommandNode baseNode) { + public Result> attemptPreprocess(T sender, String alias, String[] args, SearcherEquality equality, CommandNode baseNode) { - SearchInput input = SearchInput.of(args); - Result> toBeExecuted = baseNode.getSpecificNode(input); + InitialSearch search = InitialSearch.of(equality,args); + Result> toBeExecuted = baseNode.searchNode(search); //peak object oriented code - if (toBeExecuted.isSuccessful() && !toBeExecuted.getSuccess().resultingNode().getPermission().attempt(sender, alias, args)) { - return Result.fail(new NoPermissionAnomaly(toBeExecuted.getSuccess().resultingNode().getPermission().failureIdentifiableName())); + + if (toBeExecuted.isSuccessful() && !toBeExecuted.getSuccess().getFoundNode().getPermission().attempt(sender, alias, args)) { + return Result.fail(new NoPermissionAnomaly(toBeExecuted.getSuccess().getFoundNode().getPermission().failureIdentifiableName())); } return toBeExecuted; diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/anomalies/TooFewInputsInternalAnomaly.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/anomalies/TooFewInputsInternalAnomaly.java index 89220b7..fe51e1a 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/anomalies/TooFewInputsInternalAnomaly.java +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/anomalies/TooFewInputsInternalAnomaly.java @@ -1,20 +1,19 @@ package xyz.auriium.branch.interfacing.exceptional.anomalies; +import xyz.auriium.branch.execution.blocks.ArgumentBlock; import xyz.auriium.branch.interfacing.exceptional.Anomaly; import xyz.auriium.branch.interfacing.exceptional.AnomalyType; public class TooFewInputsInternalAnomaly implements Anomaly { private final Class argumentClass; - private final String argumentType; - private final String argumentLabel; + private final ArgumentBlock argumentType; private final int expectedArgs; private final int gotArgs; - public TooFewInputsInternalAnomaly(Class argumentClass, String argumentType, String argumentLabel, int expectedArgs, int gotArgs) { + public TooFewInputsInternalAnomaly(Class argumentClass, ArgumentBlock argumentType, int expectedArgs, int gotArgs) { this.argumentClass = argumentClass; this.argumentType = argumentType; - this.argumentLabel = argumentLabel; this.expectedArgs = expectedArgs; this.gotArgs = gotArgs; } @@ -23,10 +22,6 @@ public Class getArgumentClass() { return argumentClass; } - public String getArgumentType() { - return argumentType; - } - public int getExpectedArgs() { return expectedArgs; } diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/color/ColorMessage.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/color/ColorMessage.java deleted file mode 100644 index 04c8e7b..0000000 --- a/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/color/ColorMessage.java +++ /dev/null @@ -1,22 +0,0 @@ -package xyz.auriium.branch.interfacing.exceptional.color; - -/* - * Homegrown shitty adventure alternative (just use the fucking adventure module) - * Represents a message that can be colored with - */ -public class ColorMessage { - - private final String string; - - public ColorMessage(String string) { - this.string = string; - } - - public String getString() { - return string; - } - - public static ColorMessage of(String string) { - return new ColorMessage(string); - } -} diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/color/ColorMessageController.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/color/ColorMessageController.java deleted file mode 100644 index 97a1faa..0000000 --- a/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/color/ColorMessageController.java +++ /dev/null @@ -1,10 +0,0 @@ -package xyz.auriium.branch.interfacing.exceptional.color; - -import java.awt.*; - -public interface ColorMessageController { - - String parse(ColorMessage message); - void setColor(int index, Color color); - -} diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/color/ColorWorker.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/color/ColorWorker.java deleted file mode 100644 index 6e419e1..0000000 --- a/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/color/ColorWorker.java +++ /dev/null @@ -1,24 +0,0 @@ -package xyz.auriium.branch.interfacing.exceptional.color; - -import xyz.auriium.branch.interfacing.MessageWorker; - -public abstract class ColorWorker implements MessageWorker { - - private final ColorMessageController controller; - - public ColorWorker(ColorMessageController controller) { - this.controller = controller; - } - - @Override - public void sendMessage(String message, T type) { - sendTo(controller.parse(ColorMessage.of(message)), type); - } - - @Override - public void sendObject(ColorMessage message, T type) { - sendTo(controller.parse(message), type); - } - - abstract void sendTo(String alreadyColored, T type); -} diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/CommandNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/CommandNode.java index 252b214..ae37353 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/CommandNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/CommandNode.java @@ -25,10 +25,10 @@ import xyz.auriium.branch.execution.api.Execution; import xyz.auriium.branch.execution.api.SuggestionHandler; import xyz.auriium.branch.centralized.information.description.Description; -import xyz.auriium.branch.nodes.results.SearchInput; -import xyz.auriium.branch.nodes.results.SearchInfo; import xyz.auriium.branch.fallback.permissions.Permission; import xyz.auriium.branch.nodes.results.model.Result; +import xyz.auriium.branch.nodes.results.InitialSearch; +import xyz.auriium.branch.nodes.results.PreProcessSearch; /** * Base object @@ -38,11 +38,25 @@ public interface CommandNode { //int getExpectedConsumeAmount() //used to check how much was expected as you pass through vs how much was received, among other htings. - Result> getSpecificNode(SearchInput path); - - Result> getExecution(NodeContext context); SuggestionHandler getSuggestionHandler(); + /** + * Method called first. Locates the node to execute and adds all found nodes along the path to the SearcherOutput + * + * Is not finished since some nodes still need to add blocks to the final output + * + * @return a result containing the node required and all initial blocks found. + */ + Result> searchNode(InitialSearch input); + + /** + * Method called next. Typically adds all node-specific blocks to the search + * and returns an execution. + * + * @return execution of the node + */ + Result> searchExecute(NodeContext context, PreProcessSearch input); + /** * Gets the permission required to execute and interact with this node. Depending on the base, this may cause the node to become locked, or just completely be ignored. diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/EndpointNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/EndpointNode.java index 47c71f5..7917c2e 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/EndpointNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/EndpointNode.java @@ -21,19 +21,28 @@ package xyz.auriium.branch.nodes; -import xyz.auriium.branch.nodes.IdentifiableNode; -import xyz.auriium.branch.nodes.results.SearchInfo; -import xyz.auriium.branch.nodes.results.SearchInput; +import xyz.auriium.branch.execution.EmptySuggestionHandler; +import xyz.auriium.branch.execution.api.SuggestionHandler; +import xyz.auriium.branch.execution.blocks.EndpointBlock; +import xyz.auriium.branch.nodes.results.InitialSearch; +import xyz.auriium.branch.nodes.results.PreProcessSearch; import xyz.auriium.branch.nodes.results.model.Result; /** * A node that cannot point to any node other than itself (and therefore ends the branching of a node-path) */ -public abstract class EndpointNode implements IdentifiableNode { +public interface EndpointNode extends IdentifiableNode { @Override - public final Result> getSpecificNode(SearchInput input) { - return Result.success(new SearchInfo<>(this,input)); + EndpointBlock getIdentifier(); + + @Override + default SuggestionHandler getSuggestionHandler() { + return EmptySuggestionHandler.instance(); } + @Override + default Result> searchNode(InitialSearch input) { + return Result.success(PreProcessSearch.generate(this,input)); //new generation + } } diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/ProcessingNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/ProcessingNode.java new file mode 100644 index 0000000..bcbefe8 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/ProcessingNode.java @@ -0,0 +1,27 @@ +package xyz.auriium.branch.nodes; + +import xyz.auriium.branch.execution.DelegatingEnhancedContext; +import xyz.auriium.branch.execution.EnhancedNodeContext; +import xyz.auriium.branch.execution.NodeContext; +import xyz.auriium.branch.execution.api.Execution; +import xyz.auriium.branch.nodes.results.PreProcessSearch; +import xyz.auriium.branch.nodes.results.SearchPair; +import xyz.auriium.branch.nodes.results.model.Result; + +public interface ProcessingNode extends EndpointNode { + + Result>searchStepOneExecute(NodeContext context, PreProcessSearch preProcessSearch); + Result> searchStepTwoExecute(EnhancedNodeContext context, O object); + + @Override + default Result> searchExecute(NodeContext context, PreProcessSearch input) { + + var pairResult = searchStepOneExecute(context, input); + + if (!pairResult.isSuccessful()) return Result.transmuteFail(pairResult); + + SearchPair searchPair = pairResult.getSuccess(); + + return searchStepTwoExecute(new DelegatingEnhancedContext<>(context, searchPair.getSearch()), searchPair.getObject()); + } +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/SimpleProcessingNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/SimpleProcessingNode.java new file mode 100644 index 0000000..3efb7b4 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/SimpleProcessingNode.java @@ -0,0 +1,30 @@ +package xyz.auriium.branch.nodes; + +import xyz.auriium.branch.execution.EnhancedNodeContext; +import xyz.auriium.branch.execution.NodeContext; +import xyz.auriium.branch.execution.api.Execution; +import xyz.auriium.branch.nodes.results.PostProcessSearch; +import xyz.auriium.branch.nodes.results.PreProcessSearch; +import xyz.auriium.branch.nodes.results.SearchPair; +import xyz.auriium.branch.nodes.results.model.Result; + +/** + * Node that doesn't give a shit but still handles enhancedNodeContexts + * @param the type + */ +public interface SimpleProcessingNode extends ProcessingNode { + + Object returned = 0x01; + + @Override + default Result> searchStepOneExecute(NodeContext context, PreProcessSearch preProcessSearch) { + return Result.success(new SearchPair<>(PostProcessSearch.generate(preProcessSearch),returned)); + } + + @Override + default Result> searchStepTwoExecute(EnhancedNodeContext context, Object object) { + return onCommand(context); + } + + Result> onCommand(EnhancedNodeContext context); +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/AbstractArgNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/AbstractArgNode.java index 8b4fd2a..c4c1dff 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/AbstractArgNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/AbstractArgNode.java @@ -1,66 +1,74 @@ package xyz.auriium.branch.nodes.argument; +import xyz.auriium.branch.execution.EnhancedNodeContext; import xyz.auriium.branch.interfacing.exceptional.anomalies.TooFewInputsInternalAnomaly; import xyz.auriium.branch.execution.Block; import xyz.auriium.branch.execution.NodeContext; import xyz.auriium.branch.execution.api.ArgExecution; import xyz.auriium.branch.execution.api.Execution; import xyz.auriium.branch.execution.api.SuggestionHandler; +import xyz.auriium.branch.nodes.ProcessingNode; import xyz.auriium.branch.nodes.argument.model.ContextualBaseArgument; +import xyz.auriium.branch.nodes.results.PostProcessSearch; +import xyz.auriium.branch.nodes.results.PreProcessSearch; +import xyz.auriium.branch.nodes.results.SearchPair; import xyz.auriium.branch.nodes.results.model.Result; import xyz.auriium.branch.nodes.EndpointNode; -import java.util.ArrayDeque; -import java.util.ArrayList; -import java.util.Deque; -import java.util.List; +import java.util.*; -public abstract class AbstractArgNode extends EndpointNode { +public abstract class AbstractArgNode implements ProcessingNode { protected abstract List> getArguments(); protected abstract ArgumentContextHandler getContextHandler(); @Override - public Result> getExecution(NodeContext context) { + public SuggestionHandler getSuggestionHandler() { + return null; //TODO implement + } + @Override + public Result> searchStepOneExecute(NodeContext context, PreProcessSearch preProcessSearch) { Arguments argumentObject = new Arguments(); - Deque subdeque = new ArrayDeque<>(context.getResults().reducedPath()); + Queue subQueue = new LinkedList<>(preProcessSearch.getRemainingStrings()); int argsLeft = getArguments().size(); for (ContextualBaseArgument argument : getArguments()) { - if (subdeque.peek() == null) return Result.fail( - new TooFewInputsInternalAnomaly(argument.getClass(), argument.getType(), argument.getLabel(), context.getArgs().length + 1, context.getArgs().length) + if (subQueue.peek() == null) return Result.fail( + new TooFewInputsInternalAnomaly(argument.getClass(), argument.getType(), context.getArgs().length + 1, context.getArgs().length) ); //noInputProvidedExternal if there assert argument.reservedBlockAmount() > 0 : "Cannot be negative or zero"; - List collect = new ArrayList<>(); + List collected = new ArrayList<>(); for (int v = 0; v < argument.reservedBlockAmount(); ++v) { - Block blk = subdeque.pollFirst(); + String blk = subQueue.peek(); if (blk == null) return Result.fail(null); //noInputProvidedInternal if theres not enough for the NEXT RESERVATION inside this arg - collect.add(blk); + collected.add(subQueue.remove()); } - Result res = argument.parse(context.getSender(), context.getAlias(), collect); + Result res = argument.parse(context.getSender(), context.getAlias(), collected); if (!res.isSuccessful()) { return Result.transmuteFail(res); } + preProcessSearch.getRemainingBlocks().add(argument.getType()); argumentObject.put(argument.getLabel(), res.getSuccess()); } - return Result.success(new ArgExecution<>(getContextHandler(), context, argumentObject)); + + return Result.success(new SearchPair<>(PostProcessSearch.generate(preProcessSearch),argumentObject)); } @Override - public SuggestionHandler getSuggestionHandler() { - return null; //TODO + public Result> searchStepTwoExecute(EnhancedNodeContext context, Arguments object) { + return Result.success(new ArgExecution<>(getContextHandler(),context,object)); } } diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ArgNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ArgNode.java index 32b77b0..c7cf9ab 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ArgNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ArgNode.java @@ -1,6 +1,8 @@ package xyz.auriium.branch.nodes.argument; import xyz.auriium.branch.execution.Block; +import xyz.auriium.branch.execution.blocks.ArgumentBlock; +import xyz.auriium.branch.execution.blocks.EndpointBlock; import xyz.auriium.branch.fallback.permissions.EmptyPermission; import xyz.auriium.branch.fallback.permissions.Permission; import xyz.auriium.branch.centralized.information.description.Description; @@ -16,13 +18,13 @@ */ public class ArgNode extends AbstractArgNode { - private final Block identifier; + private final EndpointBlock identifier; private final Permission permission; private final Description description; private final List> arguments; private final ArgumentContextHandler handler; - public ArgNode(Block identifier, Permission permission, Description description, List> arguments, ArgumentContextHandler handler) { + public ArgNode(EndpointBlock identifier, Permission permission, Description description, List> arguments, ArgumentContextHandler handler) { this.identifier = identifier; this.permission = permission; this.description = description; @@ -30,12 +32,12 @@ public ArgNode(Block identifier, Permission permission, Description descripti this.handler = handler; } - public static ArgNode of(Block identifier, Permission permission, Description description, List> arguments, ArgumentContextHandler handler) { - return new ArgNode<>(identifier, permission, description, arguments, handler); + public static ArgNode of(String identifier, Permission permission, Description description, List> arguments, ArgumentContextHandler handler) { + return new ArgNode<>(new EndpointBlock(identifier), permission, description, arguments, handler); } - public static ArgNode of(Block identifier, List> arguments, ArgumentContextHandler handler) { - return new ArgNode<>(identifier, new EmptyPermission<>(), new StringDescription("TODO"), arguments, handler); //TODO impl + public static ArgNode of(String identifier, List> arguments, ArgumentContextHandler handler) { + return new ArgNode<>(new EndpointBlock(identifier), EmptyPermission.instance(), new StringDescription("TODO"), arguments, handler); //TODO impl } @@ -50,7 +52,7 @@ public Description getDescription() { } @Override - public Block getIdentifier() { + public EndpointBlock getIdentifier() { return identifier; } diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/implement/DefaultingArgNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/implement/DefaultingArgNode.java index 497df4e..af7e944 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/implement/DefaultingArgNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/implement/DefaultingArgNode.java @@ -7,7 +7,7 @@ public abstract class DefaultingArgNode extends ImplementableArgNode { @Override public Permission getPermission() { - return new EmptyPermission<>(); + return EmptyPermission.instance(); } } diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/model/ContextualBaseArgument.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/model/ContextualBaseArgument.java index efead51..4eec9c1 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/model/ContextualBaseArgument.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/model/ContextualBaseArgument.java @@ -1,11 +1,10 @@ package xyz.auriium.branch.nodes.argument.model; import xyz.auriium.branch.execution.Block; -import xyz.auriium.branch.execution.NodeContext; +import xyz.auriium.branch.execution.blocks.ArgumentBlock; import xyz.auriium.branch.nodes.results.model.Result; import java.util.List; -import java.util.Queue; /** * Base-type SPI interface describing an @@ -31,7 +30,7 @@ public interface ContextualBaseArgument { * * @return the type */ - String getType(); + ArgumentBlock getType(); /** * Method describing what label this argument uses @@ -55,6 +54,6 @@ public interface ContextualBaseArgument { * * @return a result describing the execution success of parsing */ - Result parse(T sender, String alias, List reserved); + Result parse(T sender, String alias, List reserved); } diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/model/SingleContextualArgument.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/model/SingleContextualArgument.java index b652d07..ed7d3a1 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/model/SingleContextualArgument.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/model/SingleContextualArgument.java @@ -14,9 +14,9 @@ default int reservedBlockAmount() { } @Override - default Result parse(T sender, String alias, List reserved) { + default Result parse(T sender, String alias, List reserved) { return microParse(sender,alias,reserved.get(0)); } - Result microParse(T sender, String alias, Block toParse); + Result microParse(T sender, String alias, String toParse); } diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/types/StringArgument.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/types/StringArgument.java index bad06b4..d6dd8b1 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/types/StringArgument.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/types/StringArgument.java @@ -1,21 +1,38 @@ package xyz.auriium.branch.nodes.argument.types; -import xyz.auriium.branch.execution.Block; +import xyz.auriium.branch.execution.blocks.ArgumentBlock; import xyz.auriium.branch.nodes.argument.model.SingleIgnorantArgument; import xyz.auriium.branch.nodes.results.model.Result; public class StringArgument implements SingleIgnorantArgument { private final String label; + private final String option; - StringArgument(String label) { + StringArgument(String label, String option) { this.label = label; + this.option = option; } - public static StringArgument of(String label) { - return new StringArgument(label); + /** + * Requires a new required string argument + * @param label label + * @return value to return + */ + public static StringArgument ofRequired(String label) { + return new StringArgument(label, null); } + /** + * Returns a new optional string argument + * @param label the label + * @param defaultVar the default value that is inserted if nothing is present + * use null if you don't have any idea what to default + * @return argument + */ + public static StringArgument ofOptional(String label, String defaultVar) { + return new StringArgument(label, defaultVar); + } @Override public Class outputClass() { @@ -23,8 +40,8 @@ public Class outputClass() { } @Override - public String getType() { - return "StringArgument"; + public ArgumentBlock getType() { + return new ArgumentBlock(label,"string",option == null); } @Override @@ -33,7 +50,7 @@ public String getLabel() { } @Override - public Result microParse(Object sender, String alias, Block toParse) { - return null; + public Result microParse(Object sender, String alias, String toParse) { + return null; //TODO } } diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/BranchingBuilder.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/BranchingBuilder.java new file mode 100644 index 0000000..f0b5b5f --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/BranchingBuilder.java @@ -0,0 +1,4 @@ +package xyz.auriium.branch.nodes.branching; + +public class BranchingBuilder { +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/BranchingNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/BranchingNode.java index a170cf4..8542f4d 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/BranchingNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/BranchingNode.java @@ -21,36 +21,41 @@ package xyz.auriium.branch.nodes.branching; +import xyz.auriium.branch.centralized.information.description.StringDescription; import xyz.auriium.branch.execution.Block; import xyz.auriium.branch.execution.api.Execution; import xyz.auriium.branch.execution.NodeContext; import xyz.auriium.branch.execution.api.SuggestionHandler; import xyz.auriium.branch.centralized.information.description.Description; +import xyz.auriium.branch.execution.blocks.GroupBlock; +import xyz.auriium.branch.fallback.permissions.EmptyPermission; import xyz.auriium.branch.nodes.IdentifiableNode; import xyz.auriium.branch.fallback.permissions.Permission; import xyz.auriium.branch.nodes.results.model.Result; -import xyz.auriium.branch.nodes.results.SearchInfo; -import xyz.auriium.branch.nodes.results.SearchInput; +import xyz.auriium.branch.nodes.results.InitialSearch; +import xyz.auriium.branch.nodes.results.PreProcessSearch; import java.util.ArrayList; import java.util.List; /** - * Nodes should always assume that the first block in the blockpath is theirs to consume + * Nodes should always assume that the first block in the blockpath is theirs to consume TODO write docs + * + * TODO make ordered * * @param */ public class BranchingNode implements IdentifiableNode { - private final PrestoredSet nodes; - private final Block path; + private final GroupBlock identifier; + private final PreStoredList nodes; private final Description description; private final Permission permission; private final SuggestionHandler suggestion; - public BranchingNode(PrestoredSet nodes, Block path, Description description, Permission permission) { + public BranchingNode(String identifier, PreStoredList nodes, Description description, Permission permission) { this.nodes = nodes; - this.path = path; + this.identifier = new GroupBlock(identifier); this.description = description; this.permission = permission; this.suggestion = (ctx) -> { @@ -67,8 +72,8 @@ public BranchingNode(PrestoredSet nodes, Block path, Description description, } @Override - public Block getIdentifier() { - return path; + public GroupBlock getIdentifier() { + return identifier; } @Override @@ -76,41 +81,45 @@ public Description getDescription() { return description; } - //args[] = join aMatch - //let's say this is the base @Override - public Result> getSpecificNode(SearchInput input) { - //if there is something left, the first thing in the queue is our argument - //if there is nothing left no args time + public Permission getPermission() { + return permission; + } + + @Override + public SuggestionHandler getSuggestionHandler() { + return suggestion; + } + + @Override + public Result> searchNode(InitialSearch input) { - if (!input.getReducablePath().isEmpty()) { - Block block = input.getReducablePath().getFirst(); //reveal + if (!input.getRemainingStrings().isEmpty()) { + String popped = input.getRemainingStrings().peek(); //reveal for (IdentifiableNode node : nodes.getContents()) { - if (node.getIdentifier().equals(block)) { - return node.getSpecificNode(input); //consume + if (input.getEquality().equal(identifier,popped)) { + input.getRemainingStrings().remove(); //pop string + + return node.searchNode(input); //consume } } } - return Result.success(new SearchInfo<>(this,input)); + return nodes.getSideNode().searchNode(input); } @Override - public Permission getPermission() { - return permission; + public Result> searchExecute(NodeContext context, PreProcessSearch input) { + return nodes.getSideNode().searchExecute(context, input); } - @Override - public Result> getExecution(NodeContext context) { - return nodes.getSideNode().getExecution(context); + public static BranchingNode of(String identifier, PreStoredList nodes, Description description, Permission permission) { + return new BranchingNode<>(identifier, nodes, description, permission); } - @Override - public SuggestionHandler getSuggestionHandler() { - return suggestion; + public static BranchingNode of(String identifier, PreStoredList nodes) { + return new BranchingNode<>(identifier, nodes, new StringDescription("Default description for branching command"), EmptyPermission.instance()); } - - } diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/CommonPreStoredList.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/CommonPreStoredList.java new file mode 100644 index 0000000..64b8f77 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/CommonPreStoredList.java @@ -0,0 +1,27 @@ +package xyz.auriium.branch.nodes.branching; + +import xyz.auriium.branch.nodes.CommandNode; +import xyz.auriium.branch.nodes.IdentifiableNode; + +import java.util.List; + +public class CommonPreStoredList implements PreStoredList { + + private final List> contents; + private final CommandNode node; + + public CommonPreStoredList(List> contents, CommandNode node) { + this.contents = contents; + this.node = node; + } + + @Override + public List> getContents() { + return contents; + } + + @Override + public CommandNode getSideNode() { + return node; + } +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/ExclusiveBranchingBuilder.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/ExclusiveBranchingBuilder.java deleted file mode 100644 index beb1516..0000000 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/ExclusiveBranchingBuilder.java +++ /dev/null @@ -1,81 +0,0 @@ -package xyz.auriium.branch.nodes.branching; - -import xyz.auriium.branch.execution.Block; -import xyz.auriium.branch.execution.StringBlock; -import xyz.auriium.branch.fallback.permissions.EmptyPermission; -import xyz.auriium.branch.fallback.permissions.Permission; -import xyz.auriium.branch.centralized.information.description.Description; -import xyz.auriium.branch.centralized.information.description.StringDescription; -import xyz.auriium.branch.nodes.help.HelpNode; -import xyz.auriium.branch.nodes.Builder; -import xyz.auriium.branch.nodes.CommandNode; -import xyz.auriium.branch.nodes.IdentifiableNode; - -import java.util.HashSet; -import java.util.Objects; -import java.util.Set; - -public class ExclusiveBranchingBuilder implements Builder { - - private final Set> commands; - - private Block block; - private CommandNode noArgs; - private Permission permission; - private Description description; - - public ExclusiveBranchingBuilder() { - this.commands = new HashSet<>(); - this.permission = new EmptyPermission<>(); - } - - public ExclusiveBranchingBuilder withIdentifier(Block block) { - this.block = block; - - return this; - } - - public ExclusiveBranchingBuilder withIdentifier(String string) { - this.block = StringBlock.of(string); - - return this; - } - - public ExclusiveBranchingBuilder withPermission(Permission permission) { - this.permission = permission; - - return this; - } - - public ExclusiveBranchingBuilder withDescription(Description description) { - this.description = description; - - return this; - } - - public ExclusiveBranchingBuilder withNode(IdentifiableNode node) { - commands.add(node); - - return this; - } - - public ExclusiveBranchingBuilder withNoArgs(CommandNode node) { - this.noArgs = node; - - return this; - } - - public IdentifiableNode build() { - - Objects.requireNonNull(block); - Objects.requireNonNull(permission); - Description returned = Objects.requireNonNullElse(description,new StringDescription("Default description for subcommand " + block.getIdentifier())); - - if (noArgs == null) { - noArgs = HelpNode.of(permission,returned); - } - - return new BranchingNode<>(new ExclusivePrestoredSet<>(noArgs,commands),block, returned, permission); - } - -} diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/ExclusivePrestoredBuilder.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/ExclusivePrestoredBuilder.java new file mode 100644 index 0000000..73e9e72 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/ExclusivePrestoredBuilder.java @@ -0,0 +1,45 @@ +package xyz.auriium.branch.nodes.branching; + +import xyz.auriium.branch.nodes.CommandNode; +import xyz.auriium.branch.nodes.IdentifiableNode; +import xyz.auriium.branch.nodes.help.HelpNode; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +public class ExclusivePrestoredBuilder { + + private final List> nodes = new ArrayList<>(); + private volatile CommandNode base; + + public static ExclusivePrestoredBuilder of() { + return new ExclusivePrestoredBuilder<>(); + } + + /** + * Sets the no-args handling node + * @param node the node + * @return a value + */ + public ExclusivePrestoredBuilder withNoArgs(CommandNode node) { + this.base = node; + + return this; + } + + /** + * Adds an node into the builder (ordered) + * @param node the node + * @return this builder + */ + public ExclusivePrestoredBuilder addNode(IdentifiableNode node) { + nodes.add(node); + + return this; + } + + public PreStoredList make() { + return new CommonPreStoredList<>(nodes, Objects.requireNonNullElse(base, HelpNode.of())); + } +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/ExclusivePrestoredSet.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/ExclusivePrestoredSet.java deleted file mode 100644 index fd761df..0000000 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/ExclusivePrestoredSet.java +++ /dev/null @@ -1,27 +0,0 @@ -package xyz.auriium.branch.nodes.branching; - -import xyz.auriium.branch.nodes.CommandNode; -import xyz.auriium.branch.nodes.IdentifiableNode; - -import java.util.Set; - -public class ExclusivePrestoredSet implements PrestoredSet { - - private final CommandNode commandNode; - private final Set> otherNodes; - - public ExclusivePrestoredSet(CommandNode commandNode, Set> otherNodes) { - this.commandNode = commandNode; - this.otherNodes = otherNodes; - } - - @Override - public Set> getContents() { - return otherNodes; - } - - @Override - public CommandNode getSideNode() { - return commandNode; - } -} diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/InclusiveBranchingBuilder.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/InclusiveBranchingBuilder.java deleted file mode 100644 index c5f18b3..0000000 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/InclusiveBranchingBuilder.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * - * Branch - * Copyright © 2021 Aurium - * - * Branch is free software: you can redistribute it and/or modify - * It under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * Branch is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Branch. If not, see - * and navigate to version 3 of the GNU Affero General Public License. - * - */ - -package xyz.auriium.branch.nodes.branching; - -import xyz.auriium.branch.execution.Block; -import xyz.auriium.branch.execution.StringBlock; -import xyz.auriium.branch.fallback.permissions.Permission; -import xyz.auriium.branch.fallback.permissions.EmptyPermission; -import xyz.auriium.branch.centralized.information.description.Description; -import xyz.auriium.branch.centralized.information.description.StringDescription; -import xyz.auriium.branch.nodes.EndpointNode; -import xyz.auriium.branch.nodes.help.HelpNode; -import xyz.auriium.branch.nodes.Builder; -import xyz.auriium.branch.nodes.IdentifiableNode; - -import java.util.HashSet; -import java.util.Objects; -import java.util.Set; - -public class InclusiveBranchingBuilder implements Builder { - - private final Set> commands; - - private Block block; - private EndpointNode noArgs; - private Permission permission; - private Description description; - - public InclusiveBranchingBuilder() { - this.commands = new HashSet<>(); - this.permission = new EmptyPermission<>(); - } - - public InclusiveBranchingBuilder withIdentifier(Block block) { - this.block = block; - - return this; - } - - public InclusiveBranchingBuilder withIdentifier(String string) { - this.block = StringBlock.of(string); - - return this; - } - - public InclusiveBranchingBuilder withPermission(Permission permission) { - this.permission = permission; - - return this; - } - - public InclusiveBranchingBuilder withNode(IdentifiableNode node) { - commands.add(node); - - return this; - } - - public InclusiveBranchingBuilder withNoArgs(EndpointNode node) { - this.noArgs = node; - - return this; - } - - public InclusiveBranchingBuilder withDescription(Description description) { - this.description = description; - - return this; - } - - public IdentifiableNode build() { - - Objects.requireNonNull(block); - Objects.requireNonNull(permission); - Description returned = Objects.requireNonNullElse(description,new StringDescription("Default description for subcommand " + block.getIdentifier())); - - if (noArgs == null) { - noArgs = HelpNode.of(permission,returned); - } - - return new BranchingNode<>(new InclusivePrestoredSet<>(noArgs,commands),block, returned, permission); - } - -} \ No newline at end of file diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/InclusivePreStoredBuilder.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/InclusivePreStoredBuilder.java new file mode 100644 index 0000000..24800f2 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/InclusivePreStoredBuilder.java @@ -0,0 +1,51 @@ +package xyz.auriium.branch.nodes.branching; + +import xyz.auriium.branch.nodes.CommandNode; +import xyz.auriium.branch.nodes.IdentifiableNode; +import xyz.auriium.branch.nodes.help.HelpNode; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +public class InclusivePreStoredBuilder { + + private final List> nodes = new ArrayList<>(); + private volatile IdentifiableNode base; + + public static InclusivePreStoredBuilder of() { + return new InclusivePreStoredBuilder<>(); + } + + /** + * Sets the no-args handling node + * @param node the node + * @return a value + */ + public InclusivePreStoredBuilder withNoArgs(IdentifiableNode node) { + this.base = node; + + return this; + } + + /** + * Adds an node into the builder (ordered) + * @param node the node + * @return this builder + */ + public InclusivePreStoredBuilder addNode(IdentifiableNode node) { + nodes.add(node); + + return this; + } + + public PreStoredList make() { + IdentifiableNode node = Objects.requireNonNullElse(base, HelpNode.of()); + List> list = new ArrayList<>(nodes); + + list.add(node); + + return new CommonPreStoredList<>(list, node); + } + +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/InclusivePrestoredSet.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/InclusivePrestoredSet.java deleted file mode 100644 index 2669bba..0000000 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/InclusivePrestoredSet.java +++ /dev/null @@ -1,32 +0,0 @@ -package xyz.auriium.branch.nodes.branching; - -import xyz.auriium.branch.nodes.IdentifiableNode; - -import java.util.HashSet; -import java.util.Set; - -//TODO refactor so that otherThingsInTheSet already containes alreadyStored -public class InclusivePrestoredSet implements PrestoredSet { - - private final IdentifiableNode alreadyStored; - private final Set> otherThingsInTheSet; - - public InclusivePrestoredSet(IdentifiableNode alreadyStored, Set> otherThingsInTheSet) { - this.alreadyStored = alreadyStored; - this.otherThingsInTheSet = otherThingsInTheSet; - } - - @Override - public Set> getContents() { - Set> pas = new HashSet<>(otherThingsInTheSet); - - pas.add(alreadyStored); - - return Set.copyOf(pas); - } - - @Override - public IdentifiableNode getSideNode() { - return alreadyStored; - } -} diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/PreStoredList.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/PreStoredList.java new file mode 100644 index 0000000..32d2fed --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/PreStoredList.java @@ -0,0 +1,15 @@ +package xyz.auriium.branch.nodes.branching; + +import xyz.auriium.branch.nodes.CommandNode; +import xyz.auriium.branch.nodes.IdentifiableNode; + +import java.util.List; + + +//TODO refactor to prestoredList in order to allow user defined preferences +public interface PreStoredList { + + List> getContents(); + CommandNode getSideNode(); + +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/PrestoredSet.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/PrestoredSet.java deleted file mode 100644 index 7cf7081..0000000 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/PrestoredSet.java +++ /dev/null @@ -1,13 +0,0 @@ -package xyz.auriium.branch.nodes.branching; - -import xyz.auriium.branch.nodes.CommandNode; -import xyz.auriium.branch.nodes.IdentifiableNode; - -import java.util.Set; - -public interface PrestoredSet { - - Set> getContents(); - CommandNode getSideNode(); - -} diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/help/HelpNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/help/HelpNode.java index 6f50ae5..fd32344 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/help/HelpNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/help/HelpNode.java @@ -21,33 +21,28 @@ package xyz.auriium.branch.nodes.help; -import xyz.auriium.branch.execution.Block; +import xyz.auriium.branch.centralized.information.description.StringDescription; import xyz.auriium.branch.execution.NodeContext; -import xyz.auriium.branch.execution.StringBlock; -import xyz.auriium.branch.execution.api.BasicExecution; import xyz.auriium.branch.execution.api.Execution; -import xyz.auriium.branch.execution.api.SuggestionHandler; +import xyz.auriium.branch.execution.blocks.EndpointBlock; +import xyz.auriium.branch.fallback.permissions.EmptyPermission; import xyz.auriium.branch.fallback.permissions.Permission; import xyz.auriium.branch.centralized.information.description.Description; import xyz.auriium.branch.nodes.EndpointNode; -import xyz.auriium.branch.nodes.results.SearchInfo; -import xyz.auriium.branch.nodes.results.SearchInput; +import xyz.auriium.branch.nodes.results.PreProcessSearch; import xyz.auriium.branch.nodes.results.model.Result; -import java.util.ArrayList; -import java.util.List; - /** * Represents a node that pregenerates help entries based on the message context */ -public class HelpNode extends EndpointNode { +public class HelpNode implements EndpointNode { - private final Block identifier; + private final EndpointBlock identifier; private final Permission permission; private final Description description; - public HelpNode(Block identifier, Permission permission, Description description) { - this.identifier = identifier; + public HelpNode(String name, Permission permission, Description description) { + this.identifier = new EndpointBlock(name); this.permission = permission; this.description = description; } @@ -58,7 +53,7 @@ public Permission getPermission() { } @Override - public Block getIdentifier() { + public EndpointBlock getIdentifier() { return identifier; } @@ -68,10 +63,9 @@ public Description getDescription() { } @Override - public Result> getExecution(NodeContext context) { - return Result.success(new BasicExecution<>(ct -> { + public Result> searchExecute(NodeContext context, PreProcessSearch input) { - List blocks = new ArrayList<>(); + /*List blocks = new ArrayList<>(); String[] strong = ct.getArgs(); for (int i = 0; i < strong.length - 1; i++) { @@ -80,17 +74,20 @@ public Result> getExecution(NodeContext context) { Result> toBeExecuted = context.getBaseExecutedNode().getSpecificNode(SearchInput.of(blocks)); - toBeExecuted.getSuccess().resultingNode(); + toBeExecuted.getSuccess().resultingNode();*/ - }, context)); + return null; } - @Override - public SuggestionHandler getSuggestionHandler() { - return null; //TODO + public static HelpNode of() { + return new HelpNode<>("help", EmptyPermission.instance(), new StringDescription("Default help command")); + } + + public static HelpNode of(String name, Permission permission, Description description) { + return new HelpNode<>(name, permission, description); } public static HelpNode of(Permission permission, Description description) { - return new HelpNode(new StringBlock("help"), permission, description); + return new HelpNode<>("help", permission, description); } } diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/DelegatingImmutableList.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/DelegatingImmutableList.java new file mode 100644 index 0000000..91cb928 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/DelegatingImmutableList.java @@ -0,0 +1,61 @@ +package xyz.auriium.branch.nodes.results; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public class DelegatingImmutableList implements ImmutableList { //TODO + + private final List delegate; + + DelegatingImmutableList(List list) { + this.delegate = list; + } + + @Override + public List delegate() { + return delegate; + } + + @Override + public int size() { + return delegate.size(); + } + + @Override + public boolean isEmpty() { + return delegate.isEmpty(); + } + + @Override + public boolean contains(Object o) { + return delegate.contains(o); + } + + @Override + public Iterator iterator() { + return delegate.iterator(); + } + + @Override + public Object[] toArray() { + return delegate.toArray(); + } + + @Override + public T get(int index) { + return delegate.get(index); + } + + public List getDelegate() { + return delegate; + } + + public static DelegatingImmutableList make(List list) { + return new DelegatingImmutableList<>(List.copyOf(list)); + } + + public static DelegatingImmutableList make() { + return new DelegatingImmutableList<>(List.copyOf(new ArrayList<>())); + } +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/ImmutableList.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/ImmutableList.java new file mode 100644 index 0000000..ca2ff37 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/ImmutableList.java @@ -0,0 +1,92 @@ +package xyz.auriium.branch.nodes.results; + +import java.util.Arrays; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; + +/** + * Immutable list implementation since for some strange reason the jdk never included one..... + * + * @param element + */ +public interface ImmutableList { + + /** + * Gets the delegating object (immutable) + * Delegating object should be... immutable + * + * @return returns the internal delegating object + */ + List delegate(); + + /** + * Returns the number of elements in this list. If this list contains + * more than {@code Integer.MAX_VALUE} elements, returns + * {@code Integer.MAX_VALUE}. + * + * @return the number of elements in this list + */ + int size(); + + /** + * Returns {@code true} if this list contains no elements. + * + * @return {@code true} if this list contains no elements + */ + boolean isEmpty(); + + /** + * Returns {@code true} if this list contains the specified element. + * More formally, returns {@code true} if and only if this list contains + * at least one element {@code e} such that + * {@code Objects.equals(o, e)}. + * + * @param o element whose presence in this list is to be tested + * @return {@code true} if this list contains the specified element + * @throws ClassCastException if the type of the specified element + * is incompatible with this list + * (optional) + * @throws NullPointerException if the specified element is null and this + * list does not permit null elements + * (optional) + */ + boolean contains(Object o); + + + /** + * Returns an iterator over the elements in this list in proper sequence. + * + * @return an iterator over the elements in this list in proper sequence + */ + Iterator iterator(); + + /** + * Returns an array containing all of the elements in this list in proper + * sequence (from first to last element). + * + *

The returned array will be "safe" in that no references to it are + * maintained by this list. (In other words, this method must + * allocate a new array even if this list is backed by an array). + * The caller is thus free to modify the returned array. + * + *

This method acts as bridge between array-based and collection-based + * APIs. + * + * @return an array containing all of the elements in this list in proper + * sequence + * @see Arrays#asList(Object[]) + */ + Object[] toArray(); + + + /** + * Returns the element at the specified position in this list. + * + * @param index index of the element to return + * @return the element at the specified position in this list + * @throws IndexOutOfBoundsException if the index is out of range + * ({@code index < 0 || index >= size()}) + */ + E get(int index); +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/InitialSearch.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/InitialSearch.java new file mode 100644 index 0000000..8a5e930 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/InitialSearch.java @@ -0,0 +1,57 @@ +package xyz.auriium.branch.nodes.results; + +import xyz.auriium.branch.execution.Block; +import xyz.auriium.branch.nodes.CommandNode; + +import java.util.*; + +/** + * TODO redux of searcher info/input that relies on a base-provided equality input in order to give + * nodes the option of how they want to compare block equality + */ +public class InitialSearch { + + + private final SearcherEquality equality; + + private final ImmutableList originalStrings; + private final Queue remainingStrings; + private final Queue originalBlocks = new LinkedList<>(); + //private final Queue> nodes = new LinkedList<>(); + + public InitialSearch(SearcherEquality equality, ImmutableList originalStrings) { + this.equality = equality; + + this.originalStrings = originalStrings; + this.remainingStrings = new LinkedList<>(originalStrings.delegate()); + } + + public ImmutableList getOriginalStrings() { + return originalStrings; + } + + public Queue getRemainingStrings() { + return remainingStrings; + } + + public Queue getOriginalBlocks() { + return originalBlocks; + } + + public SearcherEquality getEquality() { + return equality; + } + + public static InitialSearch of(SearcherEquality equality, String[] args) { + return new InitialSearch<>(equality, DelegatingImmutableList.make(Arrays.asList(args))); + + } + + public static InitialSearch withoutTop(InitialSearch search) { + List newBase = new ArrayList<>(search.getOriginalStrings().delegate()); + + newBase.remove(newBase.size() - 1); + + return new InitialSearch<>(search.getEquality(), DelegatingImmutableList.make(newBase)); + } +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/PostProcessSearch.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/PostProcessSearch.java new file mode 100644 index 0000000..7bd1c41 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/PostProcessSearch.java @@ -0,0 +1,55 @@ +package xyz.auriium.branch.nodes.results; + +import xyz.auriium.branch.execution.Block; +import xyz.auriium.branch.nodes.CommandNode; + +import java.util.List; + +public class PostProcessSearch { + + private final CommandNode foundNode; + + private final ImmutableList originalStrings; + private final List remainingStrings; + + private final List originalBlocks; + private final List allBlocks; + + PostProcessSearch(CommandNode foundNode, ImmutableList originalStrings, List remainingStrings, List originalBlocks, List allBlocks) { + this.foundNode = foundNode; + this.originalStrings = originalStrings; + this.remainingStrings = remainingStrings; + this.originalBlocks = originalBlocks; + this.allBlocks = allBlocks; + } + + public ImmutableList getOriginalStrings() { + return originalStrings; + } + + public List getRemainingStrings() { + return remainingStrings; + } + + public List getOriginalBlocks() { + return originalBlocks; + } + + public List getAllBlocks() { + return allBlocks; + } + + public CommandNode getFoundNode() { + return foundNode; + } + + public static PostProcessSearch generate(PreProcessSearch input) { + return new PostProcessSearch<>( + input.getFoundNode(), + input.getOriginalStrings(), + input.getRemainingStrings(), + input.getOriginalBlocks(), + List.copyOf(input.getRemainingBlocks()) + ); + } +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/PreProcessSearch.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/PreProcessSearch.java new file mode 100644 index 0000000..3950566 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/PreProcessSearch.java @@ -0,0 +1,56 @@ +package xyz.auriium.branch.nodes.results; + +import xyz.auriium.branch.execution.Block; +import xyz.auriium.branch.nodes.CommandNode; + +import java.util.LinkedList; +import java.util.List; +import java.util.Queue; + +public class PreProcessSearch { + + private final CommandNode foundNode; + + private final ImmutableList originalStrings; + private final List remainingStrings; + + private final List originalBlocks; + private final Queue remainingBlocks; + + public PreProcessSearch(CommandNode foundNode, ImmutableList originalStrings, List remainingStrings, List originalBlocks, Queue remainingBlocks) { + this.foundNode = foundNode; + this.originalStrings = originalStrings; + this.remainingStrings = remainingStrings; + this.originalBlocks = originalBlocks; + this.remainingBlocks = remainingBlocks; + } + + public ImmutableList getOriginalStrings() { + return originalStrings; + } + + public List getRemainingStrings() { + return remainingStrings; + } + + public List getOriginalBlocks() { + return originalBlocks; + } + + public Queue getRemainingBlocks() { + return remainingBlocks; + } + + public CommandNode getFoundNode() { + return foundNode; + } + + public static PreProcessSearch generate(CommandNode node, InitialSearch input) { + return new PreProcessSearch<>( + node, + input.getOriginalStrings(), + List.copyOf(input.getRemainingStrings()), + List.copyOf(input.getOriginalBlocks()), + new LinkedList<>()); + } +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/SearchInfo.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/SearchInfo.java deleted file mode 100644 index 4097c0f..0000000 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/SearchInfo.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * - * Branch - * Copyright © 2021 Aurium - * - * Branch is free software: you can redistribute it and/or modify - * It under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * Branch is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Branch. If not, see - * and navigate to version 3 of the GNU Affero General Public License. - * - */ - -package xyz.auriium.branch.nodes.results; - -import xyz.auriium.branch.execution.Block; -import xyz.auriium.branch.nodes.CommandNode; - -import java.util.List; - -public class SearchInfo { - - private final CommandNode calculatedNode; - - private final List initialPath; - private final List reducedPath; - - public SearchInfo(CommandNode calculatedNode, SearchInput input) { - this.calculatedNode = calculatedNode; - - this.initialPath = List.copyOf(input.getInitialPath()); - this.reducedPath = List.copyOf(input.getReducablePath()); - - } - - public CommandNode resultingNode() { - return calculatedNode; - } - - /** - * Gets the initial path, essentially the entire ordered list - * of all arguments used for parsing AND remaining arguments - * @return - */ - public List initialPath() { - return initialPath; - } - - /** - * Gets the reduced path, essentially, an ordered list of whatever arguments remain after - * parsing by initial node branches. - * - * If the execution is /command branching variable input1 input2, the reduced path would be - * "input1 input2" - * - * @return Ordered list (cloned) - */ - public List reducedPath() { - return reducedPath; - } - - public boolean hasMoreArguments() { - return initialPath.isEmpty(); - } -} diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/SearchInput.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/SearchInput.java deleted file mode 100644 index 59afce0..0000000 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/SearchInput.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * - * Branch - * Copyright © 2021 Aurium - * - * Branch is free software: you can redistribute it and/or modify - * It under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * Branch is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Branch. If not, see - * and navigate to version 3 of the GNU Affero General Public License. - * - */ - -package xyz.auriium.branch.nodes.results; - -import xyz.auriium.branch.execution.Block; -import xyz.auriium.branch.execution.StringBlock; - -import java.util.ArrayDeque; -import java.util.ArrayList; -import java.util.Deque; -import java.util.List; - -public class SearchInput { - - private final List initialPath; - private final Deque reducablePath; - - public SearchInput(List initialPath, Deque reducablePath) { - this.initialPath = initialPath; - this.reducablePath = reducablePath; - } - - public List getInitialPath() { - return List.copyOf(initialPath); - } - public Deque getReducablePath() { - return reducablePath; - } - - public SearchInput withoutTop() { - List newBase = new ArrayList<>(initialPath); - - newBase.remove(newBase.size() - 1); - - return new SearchInput(newBase, new ArrayDeque<>(newBase)); - } - - public static SearchInput of(String[] args) { - List blocks = new ArrayList<>(); - - for (String string : args) { - blocks.add(StringBlock.of(string)); - } - - return new SearchInput(blocks, new ArrayDeque<>(blocks)); - } - - public static SearchInput of(List strings) { - return new SearchInput(strings, new ArrayDeque<>(strings)); - } -} diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/SearchPair.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/SearchPair.java new file mode 100644 index 0000000..ce0a22f --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/SearchPair.java @@ -0,0 +1,22 @@ +package xyz.auriium.branch.nodes.results; + +import xyz.auriium.branch.nodes.results.PostProcessSearch; + +public class SearchPair { + + private final PostProcessSearch search; + private final O object; + + public SearchPair(PostProcessSearch search, O object) { + this.search = search; + this.object = object; + } + + public PostProcessSearch getSearch() { + return search; + } + + public O getObject() { + return object; + } +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/SearcherEquality.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/SearcherEquality.java new file mode 100644 index 0000000..291a7d0 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/results/SearcherEquality.java @@ -0,0 +1,12 @@ +package xyz.auriium.branch.nodes.results; + +import xyz.auriium.branch.execution.Block; + +/** + * Represents something that compares blocks + */ +public interface SearcherEquality { + + boolean equal(Block block, String popped); + +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/single/AbstractSingleNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/single/AbstractSingleNode.java index b4ac9c4..3bc92a8 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/single/AbstractSingleNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/single/AbstractSingleNode.java @@ -1,18 +1,25 @@ package xyz.auriium.branch.nodes.single; +import xyz.auriium.branch.centralized.information.description.Description; import xyz.auriium.branch.execution.Block; +import xyz.auriium.branch.execution.EnhancedNodeContext; import xyz.auriium.branch.execution.NodeContext; import xyz.auriium.branch.execution.api.BasicExecution; import xyz.auriium.branch.execution.api.Execution; import xyz.auriium.branch.execution.api.ExecutionHandler; import xyz.auriium.branch.execution.api.SuggestionHandler; +import xyz.auriium.branch.execution.blocks.EndpointBlock; +import xyz.auriium.branch.fallback.permissions.Permission; import xyz.auriium.branch.nodes.EndpointNode; +import xyz.auriium.branch.nodes.SimpleProcessingNode; +import xyz.auriium.branch.nodes.results.InitialSearch; +import xyz.auriium.branch.nodes.results.PreProcessSearch; import xyz.auriium.branch.nodes.results.model.Result; import java.util.ArrayList; import java.util.List; -public abstract class AbstractSingleNode extends EndpointNode { +public abstract class AbstractSingleNode implements SimpleProcessingNode { public static List returned = new ArrayList<>(); @@ -22,11 +29,10 @@ public SuggestionHandler getSuggestionHandler() { } @Override - public Result> getExecution(NodeContext context) { - //TODO return bad result if search failed / more than 1 result left - - return Result.success(new BasicExecution<>(getHandler(),context)); + public Result> onCommand(EnhancedNodeContext context) { + return Result.success(new BasicExecution<>(getHandler(), context)); } protected abstract ExecutionHandler getHandler(); + } diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/single/SingleNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/single/SingleNode.java index 7a26135..83660f4 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/single/SingleNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/single/SingleNode.java @@ -2,20 +2,22 @@ import xyz.auriium.branch.execution.Block; import xyz.auriium.branch.execution.api.ExecutionHandler; +import xyz.auriium.branch.execution.blocks.EndpointBlock; import xyz.auriium.branch.fallback.permissions.EmptyPermission; import xyz.auriium.branch.fallback.permissions.Permission; import xyz.auriium.branch.centralized.information.description.Description; import xyz.auriium.branch.centralized.information.description.StringDescription; +import xyz.auriium.branch.nodes.EndpointNode; public class SingleNode extends AbstractSingleNode { - private final Block identifier; + private final EndpointBlock identifier; private final Permission permission; private final Description description; private final ExecutionHandler handler; - public SingleNode(Block identifier, Permission permission, Description description, ExecutionHandler handler) { - this.identifier = identifier; + public SingleNode(String identifier, Permission permission, Description description, ExecutionHandler handler) { + this.identifier = new EndpointBlock(identifier); this.permission = permission; this.description = description; this.handler = handler; @@ -32,7 +34,7 @@ public Description getDescription() { } @Override - public Block getIdentifier() { + public EndpointBlock getIdentifier() { return identifier; } @@ -41,12 +43,12 @@ protected ExecutionHandler getHandler() { return handler; } - public static SingleNode of(Block id, ExecutionHandler handler, Permission permission, Description description) { - return new SingleNode(id,permission,description,handler); + public static SingleNode of(String id, ExecutionHandler handler, Permission permission, Description description) { + return new SingleNode<>(id, permission, description, handler); } - public static SingleNode of(Block id, ExecutionHandler handler) { - return new SingleNode(id,new EmptyPermission<>(),new StringDescription("default description"),handler); + public static SingleNode of(String id, ExecutionHandler handler) { + return new SingleNode<>(id, EmptyPermission.instance(), new StringDescription("default description"), handler); } } diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/single/SingleNodeBuilder.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/single/SingleNodeBuilder.java index bcfaee6..34dc84d 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/single/SingleNodeBuilder.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/single/SingleNodeBuilder.java @@ -9,19 +9,20 @@ import java.util.Objects; +@Deprecated //TODO undeprecate when all builders are done. for now, use each node's static method public final class SingleNodeBuilder { - private final Block identifier; + private final String identifier; private Permission permission; private Description description; private ExecutionHandler handler; - SingleNodeBuilder(Block identifier) { + SingleNodeBuilder(String identifier) { this.identifier = identifier; } - public static SingleNodeBuilder builder(Block identifier) { + public static SingleNodeBuilder builder(String identifier) { return new SingleNodeBuilder<>(identifier); } @@ -42,9 +43,9 @@ public SingleNodeBuilder withHandler(ExecutionHandler handler) { public SingleNode build() { - return new SingleNode( + return new SingleNode<>( identifier, - Objects.requireNonNullElse(permission, new EmptyPermission<>()), + Objects.requireNonNullElse(permission, EmptyPermission.instance()), Objects.requireNonNullElse(description, new StringDescription("Default description")), handler ); diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/single/implement/DefaultingSingleNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/single/implement/DefaultingSingleNode.java index c16d023..2f389a6 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/single/implement/DefaultingSingleNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/single/implement/DefaultingSingleNode.java @@ -1,21 +1,19 @@ package xyz.auriium.branch.nodes.single.implement; -import xyz.auriium.branch.execution.Block; -import xyz.auriium.branch.execution.StringBlock; +import xyz.auriium.branch.execution.blocks.EndpointBlock; import xyz.auriium.branch.fallback.permissions.EmptyPermission; import xyz.auriium.branch.fallback.permissions.Permission; -import xyz.auriium.branch.nodes.single.implement.ImplementableSingleNode; public abstract class DefaultingSingleNode extends ImplementableSingleNode { @Override public Permission getPermission() { - return new EmptyPermission<>(); + return EmptyPermission.instance(); } @Override - public Block getIdentifier() { - return StringBlock.of(getName()); + public EndpointBlock getIdentifier() { + return new EndpointBlock(getName()); } abstract String getName(); diff --git a/branch-core/src/test/java/ExecutionTest.java b/branch-core/src/test/java/ExecutionTest.java index d6e0a9d..7dd77f0 100644 --- a/branch-core/src/test/java/ExecutionTest.java +++ b/branch-core/src/test/java/ExecutionTest.java @@ -22,16 +22,13 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import xyz.auriium.branch.centralized.NodeSource; -import xyz.auriium.branch.execution.StringBlock; import xyz.auriium.branch.fallback.permissions.EmptyPermission; import xyz.auriium.branch.centralized.information.description.StringDescription; -import xyz.auriium.branch.nodes.IdentifiableNode; import xyz.auriium.branch.nodes.single.SingleNode; -import xyz.auriium.branch.tests.StringManager; public class ExecutionTest { - private final static Logger logger = LoggerFactory.getLogger(ExecutionTest.class); + /*private final static Logger logger = LoggerFactory.getLogger(ExecutionTest.class); private final StringManager manager = new StringManager(); private final NodeSource source = manager.getSource(); @@ -45,23 +42,12 @@ public void test1() { }).build() ).finish(); - manager.newCommandWithNode(SingleNode.of(StringBlock.of("test"), act -> { + manager.newCommandWithNode(SingleNode.of("hi", act -> { - },new EmptyPermission<>(), new StringDescription("cum"))); - - manager.newCommandWithNode(SingleNode.of(StringBlock.of("hi"), handler -> { - - })); - - IdentifiableNode cum = SingleNode.of(StringBlock.of("hi"), act -> { - - }); - - manager.newCommandWithBuilder() - .withNode(source.exclusiveBranching().withNode(SingleNode.of(StringBlock.of("hi"), act -> {})).build()); + },EmptyPermission.instance(), new StringDescription("cum"))); //oh my god i can't believe singlenode is actually working - } + }*/ } diff --git a/branch-core/src/test/java/xyz/auriium/branch/tests/StringAdapter.java b/branch-core/src/test/java/xyz/auriium/branch/tests/StringAdapter.java deleted file mode 100644 index 6e51118..0000000 --- a/branch-core/src/test/java/xyz/auriium/branch/tests/StringAdapter.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * - * Branch - * Copyright © 2021 Aurium - * - * Branch is free software: you can redistribute it and/or modify - * It under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * Branch is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Branch. If not, see - * and navigate to version 3 of the GNU Affero General Public License. - * - */ - -package xyz.auriium.branch.tests; - -import xyz.auriium.branch.centralized.typeadapter.CommonAdapter; - -public class StringAdapter implements CommonAdapter { -} diff --git a/branch-core/src/test/java/xyz/auriium/branch/tests/StringManager.java b/branch-core/src/test/java/xyz/auriium/branch/tests/StringManager.java deleted file mode 100644 index eca988f..0000000 --- a/branch-core/src/test/java/xyz/auriium/branch/tests/StringManager.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * - * Branch - * Copyright © 2021 Aurium - * - * Branch is free software: you can redistribute it and/or modify - * It under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * Branch is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Branch. If not, see - * and navigate to version 3 of the GNU Affero General Public License. - * - */ - -package xyz.auriium.branch.tests; - -import xyz.auriium.branch.centralized.base.NodeBase; -import xyz.auriium.branch.centralized.base.NodeBaseBuilder; -import xyz.auriium.branch.centralized.typeadapter.ManagerAdapter; -import xyz.auriium.branch.centralized.CentralizedManager; -import xyz.auriium.branch.centralized.CentralizedManagerBinder; -import xyz.auriium.branch.centralized.NodeSource; -import xyz.auriium.branch.nodes.CommandNode; - -public class StringManager implements CentralizedManager { - - private final static StringAdapter defaultAdapter = new StringAdapter(); - - @Override - public CentralizedManagerBinder getBinder(Void platform) { - throw new IllegalStateException("StringManager is for tests!"); - } - - @Override - public NodeSource getSource() { - return null; - } - - @Override - public NodeBaseBuilder newCommandWithBuilder() { - return new NodeBaseBuilder<>(this,defaultAdapter); - } - - @Override - public NodeBaseBuilder newCommandWithBuilder(ManagerAdapter adapter) { - return new NodeBaseBuilder<>(this,adapter); - } - - @Override - public void newCommandWithNode(CommandNode node) { - - } - - @Override - public void newCommandWithNode(CommandNode node, ManagerAdapter adapter) { - - } - - @Override - public void newCommand(NodeBase base) { - throw new IllegalStateException("StringManager is for tests!"); - } -} diff --git a/branch-core/src/test/java/xyz/auriium/branch/tests/centralized/MockAdapter.java b/branch-core/src/test/java/xyz/auriium/branch/tests/centralized/MockAdapter.java new file mode 100644 index 0000000..b0f8f8a --- /dev/null +++ b/branch-core/src/test/java/xyz/auriium/branch/tests/centralized/MockAdapter.java @@ -0,0 +1,6 @@ +package xyz.auriium.branch.tests.centralized; + +import xyz.auriium.branch.centralized.typeadapter.CommonAdapter; + +public class MockAdapter implements CommonAdapter { +} diff --git a/branch-core/src/test/java/xyz/auriium/branch/tests/centralized/MockManager.java b/branch-core/src/test/java/xyz/auriium/branch/tests/centralized/MockManager.java new file mode 100644 index 0000000..fe4e666 --- /dev/null +++ b/branch-core/src/test/java/xyz/auriium/branch/tests/centralized/MockManager.java @@ -0,0 +1,49 @@ +package xyz.auriium.branch.tests.centralized; + +import xyz.auriium.branch.centralized.CentralizedManager; +import xyz.auriium.branch.centralized.CentralizedManagerBinder; +import xyz.auriium.branch.centralized.NodeSource; +import xyz.auriium.branch.centralized.base.NodeBase; +import xyz.auriium.branch.centralized.base.NodeBaseBuilder; +import xyz.auriium.branch.centralized.typeadapter.ManagerAdapter; +import xyz.auriium.branch.nodes.CommandNode; + +public class MockManager implements CentralizedManager { + + private final static MockAdapter adapter = new MockAdapter(); + + @Override + public CentralizedManagerBinder getBinder(Void platform) { + throw new IllegalStateException("Cannot bind a mock manager to any platform (lol)"); + } + + @Override + public NodeSource getSource() { + return null; + } + + @Override + public NodeBaseBuilder newCommandWithBuilder() { + return new NodeBaseBuilder<>(this, adapter); + } + + @Override + public NodeBaseBuilder newCommandWithBuilder(ManagerAdapter adapter) { + return new NodeBaseBuilder<>(this, adapter); + } + + @Override + public void newCommandWithNode(CommandNode node) { + //TODO + } + + @Override + public void newCommandWithNode(CommandNode node, ManagerAdapter adapter) { + //TODO + } + + @Override + public void newCommand(NodeBase base) { + //TODO + } +} diff --git a/branch-core/src/test/java/xyz/auriium/branch/tests/centralized/MockSender.java b/branch-core/src/test/java/xyz/auriium/branch/tests/centralized/MockSender.java new file mode 100644 index 0000000..67970cf --- /dev/null +++ b/branch-core/src/test/java/xyz/auriium/branch/tests/centralized/MockSender.java @@ -0,0 +1,12 @@ +package xyz.auriium.branch.tests.centralized; + +import java.util.UUID; + +public class MockSender { + + private final UUID field = UUID.randomUUID(); + + public UUID getField() { + return field; + } +} diff --git a/branch-core/src/test/java/xyz/auriium/branch/tests/execution/BlockIT.java b/branch-core/src/test/java/xyz/auriium/branch/tests/execution/BlockIT.java new file mode 100644 index 0000000..e833ee5 --- /dev/null +++ b/branch-core/src/test/java/xyz/auriium/branch/tests/execution/BlockIT.java @@ -0,0 +1,4 @@ +package xyz.auriium.branch.tests.execution; + +public class BlockIT { +} diff --git a/branch-core/src/test/java/xyz/auriium/branch/tests/interfacing/MessageBossTest.java b/branch-core/src/test/java/xyz/auriium/branch/tests/interfacing/MessageBossTest.java new file mode 100644 index 0000000..b0c09f7 --- /dev/null +++ b/branch-core/src/test/java/xyz/auriium/branch/tests/interfacing/MessageBossTest.java @@ -0,0 +1,4 @@ +package xyz.auriium.branch.tests.interfacing; + +public class MessageBossTest { +} diff --git a/branch-core/src/test/java/xyz/auriium/branch/tests/node/single/SingleNodeIT.java b/branch-core/src/test/java/xyz/auriium/branch/tests/node/single/SingleNodeIT.java new file mode 100644 index 0000000..0d9ef12 --- /dev/null +++ b/branch-core/src/test/java/xyz/auriium/branch/tests/node/single/SingleNodeIT.java @@ -0,0 +1,5 @@ +package xyz.auriium.branch.tests.node.single; + +//Tests direct implementation features of an isolated single node +public class SingleNodeIT { +} diff --git a/branch-core/src/test/java/xyz/auriium/branch/tests/node/single/SingleNodeSearcherTest.java b/branch-core/src/test/java/xyz/auriium/branch/tests/node/single/SingleNodeSearcherTest.java new file mode 100644 index 0000000..f5051f7 --- /dev/null +++ b/branch-core/src/test/java/xyz/auriium/branch/tests/node/single/SingleNodeSearcherTest.java @@ -0,0 +1,5 @@ +package xyz.auriium.branch.tests.node.single; + +//tests not-direct features like searching +public class SingleNodeSearcherTest { +} diff --git a/branch-core/src/test/java/xyz/auriium/branch/tests/node/utility/ImmutableListTest.java b/branch-core/src/test/java/xyz/auriium/branch/tests/node/utility/ImmutableListTest.java new file mode 100644 index 0000000..81ef340 --- /dev/null +++ b/branch-core/src/test/java/xyz/auriium/branch/tests/node/utility/ImmutableListTest.java @@ -0,0 +1,60 @@ +package xyz.auriium.branch.tests.node.utility; + + +import org.junit.jupiter.api.Test; +import xyz.auriium.branch.nodes.results.DelegatingImmutableList; +import xyz.auriium.branch.nodes.results.ImmutableList; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +public class ImmutableListTest { + + @Test + public void whenListCreated_IsSeparate() { + List list = new ArrayList<>(); + ImmutableList immutableList = DelegatingImmutableList.make(list); + + list.add("test"); + + assertFalse(() -> immutableList.contains("test")); + assertTrue(immutableList::isEmpty); + } + + @Test + public void whenListCreated_CannotModifyDelegate() { + ImmutableList immutableList = DelegatingImmutableList.make(); + + assertThrows(UnsupportedOperationException.class, () -> { + immutableList.delegate().add("i am going to ruin this list's day"); //THROWS + }); + } + + @Test + public void whenListCreated_ImmutableSharesValues() { + List toDelegate = new ArrayList<>(); + toDelegate.add("test"); + + ImmutableList immutableList = DelegatingImmutableList.make(toDelegate); + + assertTrue(toDelegate.contains("test")); + assertTrue(immutableList.contains("test")); + + } + + @Test + public void whenImmutableListCopied_CanModifyCopy() { + List toDelegate = new ArrayList<>(); + toDelegate.add("test"); + + ImmutableList immutableList = DelegatingImmutableList.make(toDelegate); + List modifiable = new ArrayList<>(immutableList.delegate()); + + modifiable.remove("test"); + + assertTrue(modifiable.isEmpty()); + } + +} diff --git a/branch-core/src/test/java/xyz/auriium/branch/tests/node/utility/MockAnomaly.java b/branch-core/src/test/java/xyz/auriium/branch/tests/node/utility/MockAnomaly.java new file mode 100644 index 0000000..bb6da47 --- /dev/null +++ b/branch-core/src/test/java/xyz/auriium/branch/tests/node/utility/MockAnomaly.java @@ -0,0 +1,12 @@ +package xyz.auriium.branch.tests.node.utility; + +import xyz.auriium.branch.interfacing.exceptional.Anomaly; +import xyz.auriium.branch.interfacing.exceptional.AnomalyType; + +public class MockAnomaly implements Anomaly { + + @Override + public AnomalyType type() { + return AnomalyType.INVALID_SYNTAX; + } +} diff --git a/branch-core/src/test/java/xyz/auriium/branch/tests/node/utility/ResultTest.java b/branch-core/src/test/java/xyz/auriium/branch/tests/node/utility/ResultTest.java new file mode 100644 index 0000000..73ca97b --- /dev/null +++ b/branch-core/src/test/java/xyz/auriium/branch/tests/node/utility/ResultTest.java @@ -0,0 +1,27 @@ +package xyz.auriium.branch.tests.node.utility; + +import org.junit.jupiter.api.Test; +import xyz.auriium.branch.interfacing.exceptional.AnomalyType; +import xyz.auriium.branch.nodes.results.model.Result; + +import static org.junit.jupiter.api.Assertions.*; + +public class ResultTest { + + @Test + public void whenResultSuppliedAnomaly_isUnsuccessfulAndHasAnomaly() { + Result result = Result.fail(new MockAnomaly()); + + assertFalse(result.isSuccessful()); + assertEquals(result.getFailure().type(), AnomalyType.INVALID_SYNTAX); + } + + @Test + public void whenResultSuppliedSuccess_isSuccessfulAndHasSuccess() { + Result result = Result.success("test"); + + assertTrue(result.isSuccessful()); + assertEquals(result.getSuccess(), "test"); + } + +} diff --git a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotContext.java b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotContext.java index e6d9219..b8f45b2 100644 --- a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotContext.java +++ b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotContext.java @@ -23,9 +23,7 @@ import org.bukkit.command.CommandSender; -import xyz.auriium.branch.execution.AbstractNodeContext; import xyz.auriium.branch.nodes.CommandNode; -import xyz.auriium.branch.nodes.results.SearchInfo; public class SpigotContext extends AbstractNodeContext { diff --git a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotContextProvider.java b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotContextProvider.java index a7aa6b4..f41e470 100644 --- a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotContextProvider.java +++ b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotContextProvider.java @@ -25,7 +25,6 @@ import xyz.auriium.branch.execution.ContextProvider; import xyz.auriium.branch.execution.NodeContext; import xyz.auriium.branch.nodes.CommandNode; -import xyz.auriium.branch.nodes.results.SearchInfo; import org.bukkit.command.CommandSender; public class SpigotContextProvider implements ContextProvider { diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index 231a499..0000000 --- a/docs/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# Website - -This website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator. - -## Installation - -```console -yarn install -``` - -## Local Development - -```console -yarn start -``` - -This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server. - -## Build - -```console -yarn build -``` - -This command generates static content into the `build` directory and can be served using any static contents hosting service. - -## Deployment - -```console -GIT_USER= USE_SSH=true yarn deploy -``` - -If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch. diff --git a/pom.xml b/pom.xml index 5b6bda1..e8187e8 100644 --- a/pom.xml +++ b/pom.xml @@ -57,6 +57,24 @@ branch-core 0.1.0 + + org.junit.jupiter + junit-jupiter-engine + 5.7.0 + test + + + org.slf4j + slf4j-api + 1.7.32 + test + + + org.junit.jupiter + junit-jupiter-params + 5.7.0 + test + From f2b773363034e24c925881d62349a19054679794 Mon Sep 17 00:00:00 2001 From: Matt Date: Fri, 30 Jul 2021 15:28:46 -0700 Subject: [PATCH 09/10] Implement optionals Added experimental support for optional arguments into the argument node system. If an argument requires more than one string, it will only be substituted with an optional if **NO** strings are given. If an argument that requires 2 strings is given one and is optional, it will still throw a NoInputProvidedInternalAnomaly. --- .../fallback/strategies/OneBackStrategy.java | 4 -- .../TooFewInputsExternalAnomaly.java | 11 +++++ .../TooFewInputsInternalAnomaly.java | 26 +---------- .../exceptional/caption/AnomalyCaptioner.java | 4 +- .../nodes/argument/AbstractArgNode.java | 18 ++++++-- .../model/ContextualBaseArgument.java | 13 +++--- .../nodes/argument/types/StringArgument.java | 45 +++++++++---------- 7 files changed, 56 insertions(+), 65 deletions(-) create mode 100644 branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/anomalies/TooFewInputsExternalAnomaly.java diff --git a/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/OneBackStrategy.java b/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/OneBackStrategy.java index 806acdd..e39dc56 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/OneBackStrategy.java +++ b/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/OneBackStrategy.java @@ -27,8 +27,6 @@ import xyz.auriium.branch.nodes.results.model.Result; /** - * - * /// FIXME: 5/7/2021 This strat is possibly broken thanks to the update that changes nodes to return execution results. * * Fallback and processing strategy that does the following actions: * @@ -76,8 +74,6 @@ public Result> attemptPreprocess(T sender, String alias, Str } - - //TODO old code - refer to it if you need to /*SearchInput input = SearchInput.of(args); SearchResult toBeExecuted = baseNode.getSpecificNode(input); diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/anomalies/TooFewInputsExternalAnomaly.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/anomalies/TooFewInputsExternalAnomaly.java new file mode 100644 index 0000000..812906e --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/anomalies/TooFewInputsExternalAnomaly.java @@ -0,0 +1,11 @@ +package xyz.auriium.branch.interfacing.exceptional.anomalies; + +import xyz.auriium.branch.interfacing.exceptional.Anomaly; +import xyz.auriium.branch.interfacing.exceptional.AnomalyType; + +public class TooFewInputsExternalAnomaly implements Anomaly { + @Override + public AnomalyType type() { + return AnomalyType.INVALID_SYNTAX; + } +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/anomalies/TooFewInputsInternalAnomaly.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/anomalies/TooFewInputsInternalAnomaly.java index fe51e1a..5b665fc 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/anomalies/TooFewInputsInternalAnomaly.java +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/anomalies/TooFewInputsInternalAnomaly.java @@ -6,32 +6,8 @@ public class TooFewInputsInternalAnomaly implements Anomaly { - private final Class argumentClass; - private final ArgumentBlock argumentType; - private final int expectedArgs; - private final int gotArgs; - - public TooFewInputsInternalAnomaly(Class argumentClass, ArgumentBlock argumentType, int expectedArgs, int gotArgs) { - this.argumentClass = argumentClass; - this.argumentType = argumentType; - this.expectedArgs = expectedArgs; - this.gotArgs = gotArgs; - } - - public Class getArgumentClass() { - return argumentClass; - } - - public int getExpectedArgs() { - return expectedArgs; - } - - public int getGotArgs() { - return gotArgs; - } - @Override public AnomalyType type() { - return AnomalyType.INVALID_SYNTAX; //TODO fix + return AnomalyType.INVALID_SYNTAX; } } diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/caption/AnomalyCaptioner.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/caption/AnomalyCaptioner.java index e922766..f1afe03 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/caption/AnomalyCaptioner.java +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/caption/AnomalyCaptioner.java @@ -4,9 +4,7 @@ /** * Represents something that can handle anomalies and retrieve stringly simplified messages based on them - * These strings will then be redistributed to the - * - * TODO make these return type M message + * These messages are then distributed to a AnomalyPrinter. */ public interface AnomalyCaptioner { diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/AbstractArgNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/AbstractArgNode.java index c4c1dff..233180f 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/AbstractArgNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/AbstractArgNode.java @@ -1,6 +1,7 @@ package xyz.auriium.branch.nodes.argument; import xyz.auriium.branch.execution.EnhancedNodeContext; +import xyz.auriium.branch.interfacing.exceptional.anomalies.TooFewInputsExternalAnomaly; import xyz.auriium.branch.interfacing.exceptional.anomalies.TooFewInputsInternalAnomaly; import xyz.auriium.branch.execution.Block; import xyz.auriium.branch.execution.NodeContext; @@ -37,9 +38,20 @@ public Result> searchStepOneExecute(NodeContext cont for (ContextualBaseArgument argument : getArguments()) { - if (subQueue.peek() == null) return Result.fail( - new TooFewInputsInternalAnomaly(argument.getClass(), argument.getType(), context.getArgs().length + 1, context.getArgs().length) - ); //noInputProvidedExternal if there + if (subQueue.peek() == null) { + + if (argument.getOptional().isPresent()) { //if this is an optional argument + argumentObject.put(argument.getLabel(),argument.getOptional().get()); + + continue; + } else { + return Result.fail( + new TooFewInputsExternalAnomaly() + ); //throw + } + + + } assert argument.reservedBlockAmount() > 0 : "Cannot be negative or zero"; diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/model/ContextualBaseArgument.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/model/ContextualBaseArgument.java index 4eec9c1..aca1f92 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/model/ContextualBaseArgument.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/model/ContextualBaseArgument.java @@ -5,6 +5,7 @@ import xyz.auriium.branch.nodes.results.model.Result; import java.util.List; +import java.util.Optional; /** * Base-type SPI interface describing an @@ -18,12 +19,6 @@ */ public interface ContextualBaseArgument { - /** - * Method used for reflective-type parsing (interface scanners like ProxyNode) - * @return output -type class - */ - Class outputClass(); - /** * Method describing the single-word "type" of this argument, like * "StringArgument" or "IntegerArgument" @@ -46,6 +41,12 @@ public interface ContextualBaseArgument { */ int reservedBlockAmount(); + /** + * If this object is an optional, return a value. If it is not, will always return empty + * @return the optional describing whether this object is optional or not + */ + Optional getOptional(); + /** * Method describing how this object parses * diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/types/StringArgument.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/types/StringArgument.java index d6dd8b1..d8ffbd2 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/types/StringArgument.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/types/StringArgument.java @@ -4,44 +4,36 @@ import xyz.auriium.branch.nodes.argument.model.SingleIgnorantArgument; import xyz.auriium.branch.nodes.results.model.Result; +import java.util.Objects; +import java.util.Optional; + public class StringArgument implements SingleIgnorantArgument { private final String label; - private final String option; + private final String nullableOptional; + + private final ArgumentBlock block; - StringArgument(String label, String option) { + StringArgument(String label, String nullableOptional) { this.label = label; - this.option = option; + this.nullableOptional = nullableOptional; + + this.block = new ArgumentBlock(label, "string", nullableOptional != null); } - /** - * Requires a new required string argument - * @param label label - * @return value to return - */ - public static StringArgument ofRequired(String label) { + public static StringArgument of(String label) { return new StringArgument(label, null); } - /** - * Returns a new optional string argument - * @param label the label - * @param defaultVar the default value that is inserted if nothing is present - * use null if you don't have any idea what to default - * @return argument - */ - public static StringArgument ofOptional(String label, String defaultVar) { - return new StringArgument(label, defaultVar); - } + public static StringArgument ofOptional(String label, String optional) { + Objects.requireNonNull(optional); - @Override - public Class outputClass() { - return String.class; + return new StringArgument(label, optional); } @Override public ArgumentBlock getType() { - return new ArgumentBlock(label,"string",option == null); + return block; } @Override @@ -49,8 +41,13 @@ public String getLabel() { return label; } + @Override + public Optional getOptional() { + return Optional.ofNullable(nullableOptional); + } + @Override public Result microParse(Object sender, String alias, String toParse) { - return null; //TODO + return Result.success(toParse); } } From b6c5e76a061527cc129035f7c867deaafec63afe Mon Sep 17 00:00:00 2001 From: Matt Date: Sat, 7 Aug 2021 22:21:06 -0700 Subject: [PATCH 10/10] Work on implementing suggestions, add module-info.java A248 told me to add jpms, so i did. Suggestions are also now closer to a final product and not just wireframes. Additionally, packages have been refactored. --- branch-core/pom.xml | 3 + branch-core/src/main/java/module-info.java | 26 +++++++ .../{centralized => }/CentralizedManager.java | 8 +-- .../CentralizedManagerBinder.java | 2 +- .../branch/{centralized => }/NodeSource.java | 8 +-- .../base/AbstractNodeBase.java | 69 +++++++++++++++---- .../{execution => base}/ContextProvider.java | 2 +- .../DelegatingEnhancedContext.java | 4 +- .../base/DelegatingNodeBase.java | 19 +++-- .../EnhancedNodeContext.java | 4 +- .../{centralized => }/base/NodeBase.java | 4 +- .../base/NodeBaseBuilder.java | 17 +++-- .../{execution => base}/NodeContext.java | 2 +- .../xyz/auriium/branch/base/RunNodeBase.java | 26 +++++++ .../api => base/execution}/ArgExecution.java | 4 +- .../execution}/BasicExecution.java | 4 +- .../execution/EmptyExecutionHandler.java | 4 +- .../api => base/execution}/Execution.java | 2 +- .../execution}/ExecutionHandler.java | 4 +- .../execution/ExecutionSearchStrategy.java} | 13 ++-- .../execution}/OneBackStrategy.java | 17 +++-- .../execution}/PermissionLockoutStrategy.java | 19 ++--- .../execution/blocks/ArgumentBlock.java | 5 +- .../execution/blocks}/Block.java | 4 +- .../execution/blocks}/BlockType.java | 2 +- .../execution/blocks/BracketPattern.java | 2 +- .../execution/blocks/EndpointBlock.java | 5 +- .../execution/blocks/GroupBlock.java | 5 +- .../permissions/EmptyPermission.java | 6 +- .../permissions/Permission.java | 20 +++--- .../permissions/PredicatePermission.java | 12 ++-- .../permissions/StringPermission.java | 10 +-- .../AbstractSuggestionSearchStrategy.java | 46 +++++++++++++ .../CommonSuggestionSearchStrategy.java | 32 +++++++++ .../branch/base/suggestion/Suggestion.java | 23 +++++++ .../suggestion}/SuggestionHandler.java | 7 +- .../suggestion/SuggestionSearchStrategy.java | 16 +++++ .../branch/centralized/base/RunNodeBase.java | 26 ------- .../information/help/HelpEntry.java | 25 ------- .../centralized/information/help/Shit.java | 27 -------- .../execution/EmptySuggestionHandler.java | 45 ------------ .../TooFewInputsInternalAnomaly.java | 1 - .../xyz/auriium/branch/nodes/Builder.java | 29 -------- .../xyz/auriium/branch/nodes/CommandNode.java | 27 +++++--- .../auriium/branch/nodes/EndpointNode.java | 20 +++--- .../branch/nodes/IdentifiableNode.java | 2 +- .../auriium/branch/nodes/ProcessingNode.java | 20 +++--- .../branch/nodes/SimpleProcessingNode.java | 14 ++-- .../nodes/argument/AbstractArgNode.java | 31 +++++---- .../branch/nodes/argument/ArgNode.java | 12 ++-- .../nodes/argument/ArgumentContext.java | 2 +- .../DefaultingArgNode.java | 6 +- .../ImplementableArgNode.java | 2 +- .../model/ContextualBaseArgument.java | 7 +- .../model/SingleContextualArgument.java | 4 +- .../nodes/argument/types/StringArgument.java | 4 +- .../branch/nodes/branching/BranchingNode.java | 53 +++++++------- .../description/Description.java | 2 +- .../description/DescriptionContext.java | 2 +- .../description/GeneratingDescription.java | 2 +- .../LazyGeneratingDescription.java | 2 +- .../description/StringDescription.java | 2 +- .../auriium/branch/nodes/help/HelpNode.java | 20 +++--- .../nodes/single/AbstractSingleNode.java | 25 ++----- .../branch/nodes/single/SingleNode.java | 14 ++-- .../nodes/single/SingleNodeBuilder.java | 11 ++- .../DefaultingSingleNode.java | 8 +-- .../ImplementableSingleNode.java | 6 +- .../java/xyz/auriium/branch/package-info.java | 4 ++ .../results/DelegatingImmutableList.java | 2 +- .../model => results}/FailingResult.java | 2 +- .../{nodes => }/results/ImmutableList.java | 2 +- .../{nodes => }/results/InitialSearch.java | 5 +- .../results/PostProcessSearch.java | 4 +- .../{nodes => }/results/PreProcessSearch.java | 4 +- .../results/model => results}/Result.java | 2 +- .../{nodes => }/results/SearchPair.java | 4 +- .../{nodes => }/results/SearcherEquality.java | 4 +- .../model => results}/SuccessfulResult.java | 2 +- .../typeadapter/CommonAdapter.java | 6 +- .../typeadapter/ManagerAdapter.java | 2 +- .../typeadapter/ReduxAdapter.java | 4 +- .../typeadapter/StandardCommonAdapter.java | 2 +- branch-core/src/test/java/ExecutionTest.java | 7 -- .../branch/tests/centralized/MockAdapter.java | 2 +- .../branch/tests/centralized/MockContext.java | 36 ++++++++++ .../centralized/MockContextProducer.java | 11 +++ .../branch/tests/centralized/MockManager.java | 12 ++-- .../branch/tests/centralized/MockSender.java | 10 +++ .../fallback/permission/PermissionTest.java | 45 ++++++++++++ .../node/single/SingleNodeManagedIT.java | 4 ++ ...{SingleNodeIT.java => SingleNodeTest.java} | 11 ++- .../tests/node/utility/ImmutableListTest.java | 4 +- .../branch/tests/node/utility/ResultTest.java | 2 +- .../auriium/branch/spigot/CommandWrapper.java | 2 +- .../branch/spigot/SpigotContextProvider.java | 4 +- .../auriium/branch/spigot/SpigotManager.java | 14 ++-- .../branch/spigot/SpigotManagerBinder.java | 4 +- .../branch/spigot/adapter/PlayerAdapter.java | 2 +- .../branch/spigot/adapter/SenderAdapter.java | 2 +- .../spigot/permisison/SpigotPermission.java | 7 +- 101 files changed, 645 insertions(+), 490 deletions(-) create mode 100644 branch-core/src/main/java/module-info.java rename branch-core/src/main/java/xyz/auriium/branch/{centralized => }/CentralizedManager.java (87%) rename branch-core/src/main/java/xyz/auriium/branch/{centralized => }/CentralizedManagerBinder.java (96%) rename branch-core/src/main/java/xyz/auriium/branch/{centralized => }/NodeSource.java (68%) rename branch-core/src/main/java/xyz/auriium/branch/{centralized => }/base/AbstractNodeBase.java (58%) rename branch-core/src/main/java/xyz/auriium/branch/{execution => base}/ContextProvider.java (96%) rename branch-core/src/main/java/xyz/auriium/branch/{execution => base}/DelegatingEnhancedContext.java (89%) rename branch-core/src/main/java/xyz/auriium/branch/{centralized => }/base/DelegatingNodeBase.java (52%) rename branch-core/src/main/java/xyz/auriium/branch/{execution => base}/EnhancedNodeContext.java (54%) rename branch-core/src/main/java/xyz/auriium/branch/{centralized => }/base/NodeBase.java (94%) rename branch-core/src/main/java/xyz/auriium/branch/{centralized => }/base/NodeBaseBuilder.java (81%) rename branch-core/src/main/java/xyz/auriium/branch/{execution => base}/NodeContext.java (97%) create mode 100644 branch-core/src/main/java/xyz/auriium/branch/base/RunNodeBase.java rename branch-core/src/main/java/xyz/auriium/branch/{execution/api => base/execution}/ArgExecution.java (87%) rename branch-core/src/main/java/xyz/auriium/branch/{execution/api => base/execution}/BasicExecution.java (79%) rename branch-core/src/main/java/xyz/auriium/branch/{ => base}/execution/EmptyExecutionHandler.java (90%) rename branch-core/src/main/java/xyz/auriium/branch/{execution/api => base/execution}/Execution.java (96%) rename branch-core/src/main/java/xyz/auriium/branch/{execution/api => base/execution}/ExecutionHandler.java (91%) rename branch-core/src/main/java/xyz/auriium/branch/{fallback/strategies/FallbackSearchStrategy.java => base/execution/ExecutionSearchStrategy.java} (71%) rename branch-core/src/main/java/xyz/auriium/branch/{fallback/strategies => base/execution}/OneBackStrategy.java (85%) rename branch-core/src/main/java/xyz/auriium/branch/{fallback/strategies => base/execution}/PermissionLockoutStrategy.java (69%) rename branch-core/src/main/java/xyz/auriium/branch/{ => base}/execution/blocks/ArgumentBlock.java (85%) rename branch-core/src/main/java/xyz/auriium/branch/{execution => base/execution/blocks}/Block.java (96%) rename branch-core/src/main/java/xyz/auriium/branch/{execution => base/execution/blocks}/BlockType.java (94%) rename branch-core/src/main/java/xyz/auriium/branch/{ => base}/execution/blocks/BracketPattern.java (93%) rename branch-core/src/main/java/xyz/auriium/branch/{ => base}/execution/blocks/EndpointBlock.java (81%) rename branch-core/src/main/java/xyz/auriium/branch/{ => base}/execution/blocks/GroupBlock.java (80%) rename branch-core/src/main/java/xyz/auriium/branch/{fallback => base}/permissions/EmptyPermission.java (89%) rename branch-core/src/main/java/xyz/auriium/branch/{fallback => base}/permissions/Permission.java (69%) rename branch-core/src/main/java/xyz/auriium/branch/{fallback => base}/permissions/PredicatePermission.java (78%) rename branch-core/src/main/java/xyz/auriium/branch/{fallback => base}/permissions/StringPermission.java (55%) create mode 100644 branch-core/src/main/java/xyz/auriium/branch/base/suggestion/AbstractSuggestionSearchStrategy.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/base/suggestion/CommonSuggestionSearchStrategy.java create mode 100644 branch-core/src/main/java/xyz/auriium/branch/base/suggestion/Suggestion.java rename branch-core/src/main/java/xyz/auriium/branch/{execution/api => base/suggestion}/SuggestionHandler.java (84%) create mode 100644 branch-core/src/main/java/xyz/auriium/branch/base/suggestion/SuggestionSearchStrategy.java delete mode 100644 branch-core/src/main/java/xyz/auriium/branch/centralized/base/RunNodeBase.java delete mode 100644 branch-core/src/main/java/xyz/auriium/branch/centralized/information/help/HelpEntry.java delete mode 100644 branch-core/src/main/java/xyz/auriium/branch/centralized/information/help/Shit.java delete mode 100644 branch-core/src/main/java/xyz/auriium/branch/execution/EmptySuggestionHandler.java delete mode 100644 branch-core/src/main/java/xyz/auriium/branch/nodes/Builder.java rename branch-core/src/main/java/xyz/auriium/branch/nodes/argument/{implement => impl}/DefaultingArgNode.java (51%) rename branch-core/src/main/java/xyz/auriium/branch/nodes/argument/{implement => impl}/ImplementableArgNode.java (91%) rename branch-core/src/main/java/xyz/auriium/branch/{centralized/information => nodes}/description/Description.java (93%) rename branch-core/src/main/java/xyz/auriium/branch/{centralized/information => nodes}/description/DescriptionContext.java (84%) rename branch-core/src/main/java/xyz/auriium/branch/{centralized/information => nodes}/description/GeneratingDescription.java (89%) rename branch-core/src/main/java/xyz/auriium/branch/{centralized/information => nodes}/description/LazyGeneratingDescription.java (91%) rename branch-core/src/main/java/xyz/auriium/branch/{centralized/information => nodes}/description/StringDescription.java (84%) rename branch-core/src/main/java/xyz/auriium/branch/nodes/single/{implement => impl}/DefaultingSingleNode.java (59%) rename branch-core/src/main/java/xyz/auriium/branch/nodes/single/{implement => impl}/ImplementableSingleNode.java (64%) create mode 100644 branch-core/src/main/java/xyz/auriium/branch/package-info.java rename branch-core/src/main/java/xyz/auriium/branch/{nodes => }/results/DelegatingImmutableList.java (96%) rename branch-core/src/main/java/xyz/auriium/branch/{nodes/results/model => results}/FailingResult.java (96%) rename branch-core/src/main/java/xyz/auriium/branch/{nodes => }/results/ImmutableList.java (98%) rename branch-core/src/main/java/xyz/auriium/branch/{nodes => }/results/InitialSearch.java (92%) rename branch-core/src/main/java/xyz/auriium/branch/{nodes => }/results/PostProcessSearch.java (94%) rename branch-core/src/main/java/xyz/auriium/branch/{nodes => }/results/PreProcessSearch.java (94%) rename branch-core/src/main/java/xyz/auriium/branch/{nodes/results/model => results}/Result.java (96%) rename branch-core/src/main/java/xyz/auriium/branch/{nodes => }/results/SearchPair.java (78%) rename branch-core/src/main/java/xyz/auriium/branch/{nodes => }/results/SearcherEquality.java (60%) rename branch-core/src/main/java/xyz/auriium/branch/{nodes/results/model => results}/SuccessfulResult.java (96%) rename branch-core/src/main/java/xyz/auriium/branch/{centralized => }/typeadapter/CommonAdapter.java (93%) rename branch-core/src/main/java/xyz/auriium/branch/{centralized => }/typeadapter/ManagerAdapter.java (96%) rename branch-core/src/main/java/xyz/auriium/branch/{centralized => }/typeadapter/ReduxAdapter.java (68%) rename branch-core/src/main/java/xyz/auriium/branch/{centralized => }/typeadapter/StandardCommonAdapter.java (94%) create mode 100644 branch-core/src/test/java/xyz/auriium/branch/tests/centralized/MockContext.java create mode 100644 branch-core/src/test/java/xyz/auriium/branch/tests/centralized/MockContextProducer.java create mode 100644 branch-core/src/test/java/xyz/auriium/branch/tests/fallback/permission/PermissionTest.java create mode 100644 branch-core/src/test/java/xyz/auriium/branch/tests/node/single/SingleNodeManagedIT.java rename branch-core/src/test/java/xyz/auriium/branch/tests/node/single/{SingleNodeIT.java => SingleNodeTest.java} (50%) diff --git a/branch-core/pom.xml b/branch-core/pom.xml index c9fdd25..8a4fb06 100644 --- a/branch-core/pom.xml +++ b/branch-core/pom.xml @@ -41,14 +41,17 @@ org.slf4j slf4j-api + test org.junit.jupiter junit-jupiter-engine + test org.junit.jupiter junit-jupiter-params + test diff --git a/branch-core/src/main/java/module-info.java b/branch-core/src/main/java/module-info.java new file mode 100644 index 0000000..a9fa6ec --- /dev/null +++ b/branch-core/src/main/java/module-info.java @@ -0,0 +1,26 @@ +module branch.core { + exports xyz.auriium.branch; + exports xyz.auriium.branch.base; + exports xyz.auriium.branch.base.execution; + exports xyz.auriium.branch.base.execution.blocks; + exports xyz.auriium.branch.base.permissions; + exports xyz.auriium.branch.base.suggestion; + exports xyz.auriium.branch.nodes; + exports xyz.auriium.branch.nodes.argument; + exports xyz.auriium.branch.nodes.argument.model; + exports xyz.auriium.branch.nodes.argument.impl; + exports xyz.auriium.branch.nodes.argument.types; + exports xyz.auriium.branch.results; + exports xyz.auriium.branch.nodes.branching; + exports xyz.auriium.branch.nodes.description; + exports xyz.auriium.branch.nodes.single; + exports xyz.auriium.branch.nodes.single.impl; + exports xyz.auriium.branch.nodes.help; + exports xyz.auriium.branch.nodes.proxy; + exports xyz.auriium.branch.interfacing; + exports xyz.auriium.branch.interfacing.exceptional; + exports xyz.auriium.branch.interfacing.exceptional.anomalies; + exports xyz.auriium.branch.interfacing.exceptional.caption; + exports xyz.auriium.branch.interfacing.exceptional.printing; + exports xyz.auriium.branch.typeadapter; +} \ No newline at end of file diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/CentralizedManager.java b/branch-core/src/main/java/xyz/auriium/branch/CentralizedManager.java similarity index 87% rename from branch-core/src/main/java/xyz/auriium/branch/centralized/CentralizedManager.java rename to branch-core/src/main/java/xyz/auriium/branch/CentralizedManager.java index 3fee33f..18aa04d 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/CentralizedManager.java +++ b/branch-core/src/main/java/xyz/auriium/branch/CentralizedManager.java @@ -19,11 +19,11 @@ * */ -package xyz.auriium.branch.centralized; +package xyz.auriium.branch; -import xyz.auriium.branch.centralized.base.NodeBase; -import xyz.auriium.branch.centralized.base.NodeBaseBuilder; -import xyz.auriium.branch.centralized.typeadapter.ManagerAdapter; +import xyz.auriium.branch.base.NodeBase; +import xyz.auriium.branch.base.NodeBaseBuilder; +import xyz.auriium.branch.typeadapter.ManagerAdapter; import xyz.auriium.branch.nodes.CommandNode; /** diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/CentralizedManagerBinder.java b/branch-core/src/main/java/xyz/auriium/branch/CentralizedManagerBinder.java similarity index 96% rename from branch-core/src/main/java/xyz/auriium/branch/centralized/CentralizedManagerBinder.java rename to branch-core/src/main/java/xyz/auriium/branch/CentralizedManagerBinder.java index fd42a49..066cbf6 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/CentralizedManagerBinder.java +++ b/branch-core/src/main/java/xyz/auriium/branch/CentralizedManagerBinder.java @@ -19,7 +19,7 @@ * */ -package xyz.auriium.branch.centralized; +package xyz.auriium.branch; /** * Represents a carrier vessel which is typically attached to the instance of a centralizedManagerBinder's platform diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/NodeSource.java b/branch-core/src/main/java/xyz/auriium/branch/NodeSource.java similarity index 68% rename from branch-core/src/main/java/xyz/auriium/branch/centralized/NodeSource.java rename to branch-core/src/main/java/xyz/auriium/branch/NodeSource.java index cdb9b7b..62179b3 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/NodeSource.java +++ b/branch-core/src/main/java/xyz/auriium/branch/NodeSource.java @@ -1,8 +1,8 @@ -package xyz.auriium.branch.centralized; +package xyz.auriium.branch; -import xyz.auriium.branch.execution.api.ExecutionHandler; -import xyz.auriium.branch.fallback.permissions.Permission; -import xyz.auriium.branch.centralized.information.description.Description; +import xyz.auriium.branch.base.execution.ExecutionHandler; +import xyz.auriium.branch.base.permissions.Permission; +import xyz.auriium.branch.nodes.description.Description; import xyz.auriium.branch.nodes.branching.BranchingBuilder; import xyz.auriium.branch.nodes.single.SingleNode; import xyz.auriium.branch.nodes.single.SingleNodeBuilder; diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/base/AbstractNodeBase.java b/branch-core/src/main/java/xyz/auriium/branch/base/AbstractNodeBase.java similarity index 58% rename from branch-core/src/main/java/xyz/auriium/branch/centralized/base/AbstractNodeBase.java rename to branch-core/src/main/java/xyz/auriium/branch/base/AbstractNodeBase.java index 47fdf79..1897230 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/base/AbstractNodeBase.java +++ b/branch-core/src/main/java/xyz/auriium/branch/base/AbstractNodeBase.java @@ -19,19 +19,20 @@ * */ -package xyz.auriium.branch.centralized.base; +package xyz.auriium.branch.base; -import xyz.auriium.branch.centralized.typeadapter.ManagerAdapter; -import xyz.auriium.branch.execution.api.Execution; -import xyz.auriium.branch.execution.ContextProvider; -import xyz.auriium.branch.execution.NodeContext; -import xyz.auriium.branch.fallback.strategies.FallbackSearchStrategy; +import xyz.auriium.branch.base.suggestion.Suggestion; +import xyz.auriium.branch.base.suggestion.SuggestionSearchStrategy; +import xyz.auriium.branch.typeadapter.ManagerAdapter; +import xyz.auriium.branch.base.execution.Execution; +import xyz.auriium.branch.base.execution.ExecutionSearchStrategy; import xyz.auriium.branch.interfacing.exceptional.AnomalyHandler; import xyz.auriium.branch.nodes.CommandNode; -import xyz.auriium.branch.nodes.results.PreProcessSearch; -import xyz.auriium.branch.nodes.results.SearcherEquality; -import xyz.auriium.branch.nodes.results.model.Result; +import xyz.auriium.branch.results.PreProcessSearch; +import xyz.auriium.branch.results.SearcherEquality; +import xyz.auriium.branch.results.Result; +import java.util.ArrayList; import java.util.List; /** @@ -45,15 +46,19 @@ public abstract class AbstractNodeBase implements NodeBase { private final AnomalyHandler handler; private final CommandNode baseNode; - private final FallbackSearchStrategy strategy; + private final ExecutionSearchStrategy executionStrategy; + private final SuggestionSearchStrategy suggestionStrategy; private final ContextProvider provider; private final SearcherEquality equality; - protected AbstractNodeBase(ManagerAdapter adapter, AnomalyHandler handler, CommandNode baseNode, FallbackSearchStrategy strategy, ContextProvider provider, SearcherEquality equality) { + private final static List EMPTY = new ArrayList<>(); + + protected AbstractNodeBase(ManagerAdapter adapter, AnomalyHandler handler, CommandNode baseNode, ExecutionSearchStrategy executionStrategy, SuggestionSearchStrategy suggestionStrategy, ContextProvider provider, SearcherEquality equality) { this.adapter = adapter; this.handler = handler; this.baseNode = baseNode; - this.strategy = strategy; + this.executionStrategy = executionStrategy; + this.suggestionStrategy = suggestionStrategy; this.provider = provider; this.equality = equality; } @@ -79,8 +84,9 @@ public void execute(I input, String alias, String[] args) { //have acquired C-type via parsing. A adaptedSender = adapter.adapt(input); + NodeContext produced = provider.produce(adaptedSender, alias, args); - Result> preprocessResult = strategy.attemptPreprocess(adaptedSender, alias, args, equality, baseNode); + Result> preprocessResult = executionStrategy.attemptPreprocess(produced, equality, baseNode); if (!preprocessResult.isSuccessful()) { handler.communicateAdapted(adaptedSender, preprocessResult.getFailure()); @@ -89,7 +95,6 @@ public void execute(I input, String alias, String[] args) { } PreProcessSearch info = preprocessResult.getSuccess(); - NodeContext produced = provider.produce(adaptedSender, alias, args); Result> executionResult = info.getFoundNode().searchExecute(produced, info); @@ -103,7 +108,41 @@ public void execute(I input, String alias, String[] args) { } public List suggest(I input, String alias, String[] args) { - return null; //TODO + + if (!adapter.canAdapt(input)) { + handler.communicateNotAdapted(input, adapter.failedParseResponse(input)); + + return EMPTY; + } + + //have acquired C-type via parsing. + + A adaptedSender = adapter.adapt(input); + NodeContext produced = provider.produce(adaptedSender, alias, args); + + Result> preprocessResult = executionStrategy.attemptPreprocess(produced, equality, baseNode); + + if (!preprocessResult.isSuccessful()) { + handler.communicateAdapted(adaptedSender, preprocessResult.getFailure()); + + return EMPTY; + } + + PreProcessSearch info = preprocessResult.getSuccess(); + + var searchResult = info.getFoundNode().searchSuggestion(produced, info); + + if (!searchResult.isSuccessful()) { + handler.communicateAdapted(adaptedSender, searchResult.getFailure()); + + return EMPTY; + } + + List> suggestions = searchResult.getSuccess(); + + return suggestionStrategy.order(suggestions,produced); } + + } diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/ContextProvider.java b/branch-core/src/main/java/xyz/auriium/branch/base/ContextProvider.java similarity index 96% rename from branch-core/src/main/java/xyz/auriium/branch/execution/ContextProvider.java rename to branch-core/src/main/java/xyz/auriium/branch/base/ContextProvider.java index bcf27c7..2860f0f 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/execution/ContextProvider.java +++ b/branch-core/src/main/java/xyz/auriium/branch/base/ContextProvider.java @@ -19,7 +19,7 @@ * */ -package xyz.auriium.branch.execution; +package xyz.auriium.branch.base; /** * Represents something that produces specific context based on a platform diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/DelegatingEnhancedContext.java b/branch-core/src/main/java/xyz/auriium/branch/base/DelegatingEnhancedContext.java similarity index 89% rename from branch-core/src/main/java/xyz/auriium/branch/execution/DelegatingEnhancedContext.java rename to branch-core/src/main/java/xyz/auriium/branch/base/DelegatingEnhancedContext.java index c36bcbb..1bcd9aa 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/execution/DelegatingEnhancedContext.java +++ b/branch-core/src/main/java/xyz/auriium/branch/base/DelegatingEnhancedContext.java @@ -1,6 +1,6 @@ -package xyz.auriium.branch.execution; +package xyz.auriium.branch.base; -import xyz.auriium.branch.nodes.results.PostProcessSearch; +import xyz.auriium.branch.results.PostProcessSearch; public class DelegatingEnhancedContext implements EnhancedNodeContext { diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/base/DelegatingNodeBase.java b/branch-core/src/main/java/xyz/auriium/branch/base/DelegatingNodeBase.java similarity index 52% rename from branch-core/src/main/java/xyz/auriium/branch/centralized/base/DelegatingNodeBase.java rename to branch-core/src/main/java/xyz/auriium/branch/base/DelegatingNodeBase.java index 6f6c9d6..4de9947 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/base/DelegatingNodeBase.java +++ b/branch-core/src/main/java/xyz/auriium/branch/base/DelegatingNodeBase.java @@ -1,13 +1,13 @@ -package xyz.auriium.branch.centralized.base; +package xyz.auriium.branch.base; -import xyz.auriium.branch.centralized.typeadapter.ManagerAdapter; -import xyz.auriium.branch.execution.ContextProvider; -import xyz.auriium.branch.fallback.strategies.FallbackSearchStrategy; -import xyz.auriium.branch.centralized.information.description.Description; -import xyz.auriium.branch.interfacing.exceptional.AnomalyHandler; +import xyz.auriium.branch.base.suggestion.SuggestionSearchStrategy; import xyz.auriium.branch.nodes.CommandNode; +import xyz.auriium.branch.typeadapter.ManagerAdapter; +import xyz.auriium.branch.base.execution.ExecutionSearchStrategy; +import xyz.auriium.branch.nodes.description.Description; +import xyz.auriium.branch.interfacing.exceptional.AnomalyHandler; import xyz.auriium.branch.nodes.IdentifiableNode; -import xyz.auriium.branch.nodes.results.SearcherEquality; +import xyz.auriium.branch.results.SearcherEquality; /** * Adapting node base that delegates identifier calls to the first node in the base stack. @@ -16,9 +16,8 @@ public class DelegatingNodeBase extends RunNodeBase { private final IdentifiableNode baseNode; - public DelegatingNodeBase(ManagerAdapter adapter, AnomalyHandler handler, IdentifiableNode baseNode, FallbackSearchStrategy strategy, ContextProvider provider, SearcherEquality equality) { - super(adapter, handler, baseNode, strategy, provider, equality); - + public DelegatingNodeBase(ManagerAdapter adapter, AnomalyHandler handler, IdentifiableNode baseNode, ExecutionSearchStrategy executionStrategy, SuggestionSearchStrategy suggestionStrategy, ContextProvider provider, SearcherEquality equality) { + super(adapter, handler, baseNode, executionStrategy, suggestionStrategy, provider, equality); this.baseNode = baseNode; } diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/EnhancedNodeContext.java b/branch-core/src/main/java/xyz/auriium/branch/base/EnhancedNodeContext.java similarity index 54% rename from branch-core/src/main/java/xyz/auriium/branch/execution/EnhancedNodeContext.java rename to branch-core/src/main/java/xyz/auriium/branch/base/EnhancedNodeContext.java index a5591e2..69be2ef 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/execution/EnhancedNodeContext.java +++ b/branch-core/src/main/java/xyz/auriium/branch/base/EnhancedNodeContext.java @@ -1,6 +1,6 @@ -package xyz.auriium.branch.execution; +package xyz.auriium.branch.base; -import xyz.auriium.branch.nodes.results.PostProcessSearch; +import xyz.auriium.branch.results.PostProcessSearch; public interface EnhancedNodeContext extends NodeContext { diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/base/NodeBase.java b/branch-core/src/main/java/xyz/auriium/branch/base/NodeBase.java similarity index 94% rename from branch-core/src/main/java/xyz/auriium/branch/centralized/base/NodeBase.java rename to branch-core/src/main/java/xyz/auriium/branch/base/NodeBase.java index 82cc03d..e912ec0 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/base/NodeBase.java +++ b/branch-core/src/main/java/xyz/auriium/branch/base/NodeBase.java @@ -19,9 +19,9 @@ * */ -package xyz.auriium.branch.centralized.base; +package xyz.auriium.branch.base; -import xyz.auriium.branch.centralized.information.description.Description; +import xyz.auriium.branch.nodes.description.Description; import java.util.Collections; import java.util.List; diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/base/NodeBaseBuilder.java b/branch-core/src/main/java/xyz/auriium/branch/base/NodeBaseBuilder.java similarity index 81% rename from branch-core/src/main/java/xyz/auriium/branch/centralized/base/NodeBaseBuilder.java rename to branch-core/src/main/java/xyz/auriium/branch/base/NodeBaseBuilder.java index 2754fa6..8621f72 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/base/NodeBaseBuilder.java +++ b/branch-core/src/main/java/xyz/auriium/branch/base/NodeBaseBuilder.java @@ -19,15 +19,14 @@ * */ -package xyz.auriium.branch.centralized.base; +package xyz.auriium.branch.base; -import xyz.auriium.branch.centralized.CentralizedManager; -import xyz.auriium.branch.centralized.typeadapter.ManagerAdapter; -import xyz.auriium.branch.execution.ContextProvider; -import xyz.auriium.branch.fallback.strategies.FallbackSearchStrategy; +import xyz.auriium.branch.CentralizedManager; +import xyz.auriium.branch.typeadapter.ManagerAdapter; +import xyz.auriium.branch.base.execution.ExecutionSearchStrategy; import xyz.auriium.branch.interfacing.exceptional.AnomalyHandler; import xyz.auriium.branch.nodes.IdentifiableNode; -import xyz.auriium.branch.nodes.results.SearcherEquality; +import xyz.auriium.branch.results.SearcherEquality; import java.util.*; @@ -45,7 +44,7 @@ public class NodeBaseBuilder { private AnomalyHandler handler; private IdentifiableNode node; - private FallbackSearchStrategy strategy; + private ExecutionSearchStrategy strategy; private ContextProvider provider; private SearcherEquality equality; @@ -54,7 +53,7 @@ public NodeBaseBuilder(CentralizedManager manager, ManagerAdapter ad this.adapter = adapter; } - public NodeBaseBuilder(CentralizedManager manager, ManagerAdapter adapter, FallbackSearchStrategy strategy, ContextProvider provider, AnomalyHandler handler, SearcherEquality equality) { + public NodeBaseBuilder(CentralizedManager manager, ManagerAdapter adapter, ExecutionSearchStrategy strategy, ContextProvider provider, AnomalyHandler handler, SearcherEquality equality) { this.manager = manager; this.adapter = adapter; this.strategy = strategy; @@ -69,7 +68,7 @@ public NodeBaseBuilder withNode(IdentifiableNode node) { return this; } - public NodeBaseBuilder customStrategy(FallbackSearchStrategy strategy) { + public NodeBaseBuilder customStrategy(ExecutionSearchStrategy strategy) { this.strategy = strategy; return this; diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/NodeContext.java b/branch-core/src/main/java/xyz/auriium/branch/base/NodeContext.java similarity index 97% rename from branch-core/src/main/java/xyz/auriium/branch/execution/NodeContext.java rename to branch-core/src/main/java/xyz/auriium/branch/base/NodeContext.java index 978dee9..6058a55 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/execution/NodeContext.java +++ b/branch-core/src/main/java/xyz/auriium/branch/base/NodeContext.java @@ -19,7 +19,7 @@ * */ -package xyz.auriium.branch.execution; +package xyz.auriium.branch.base; /** diff --git a/branch-core/src/main/java/xyz/auriium/branch/base/RunNodeBase.java b/branch-core/src/main/java/xyz/auriium/branch/base/RunNodeBase.java new file mode 100644 index 0000000..253f23f --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/base/RunNodeBase.java @@ -0,0 +1,26 @@ +package xyz.auriium.branch.base; + +import xyz.auriium.branch.base.suggestion.SuggestionSearchStrategy; +import xyz.auriium.branch.typeadapter.ManagerAdapter; +import xyz.auriium.branch.base.execution.Execution; +import xyz.auriium.branch.base.execution.ExecutionSearchStrategy; +import xyz.auriium.branch.interfacing.exceptional.AnomalyHandler; +import xyz.auriium.branch.nodes.CommandNode; +import xyz.auriium.branch.results.SearcherEquality; + +/** + * Nodebase that simply runs the execution runnable + * @param input type + * @param adapted type + */ +public abstract class RunNodeBase extends AbstractNodeBase { + + protected RunNodeBase(ManagerAdapter adapter, AnomalyHandler handler, CommandNode baseNode, ExecutionSearchStrategy executionStrategy, SuggestionSearchStrategy suggestionStrategy, ContextProvider provider, SearcherEquality equality) { + super(adapter, handler, baseNode, executionStrategy, suggestionStrategy, provider, equality); + } + + @Override + void submitExecution(Execution execution) { + execution.run(); + } +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/api/ArgExecution.java b/branch-core/src/main/java/xyz/auriium/branch/base/execution/ArgExecution.java similarity index 87% rename from branch-core/src/main/java/xyz/auriium/branch/execution/api/ArgExecution.java rename to branch-core/src/main/java/xyz/auriium/branch/base/execution/ArgExecution.java index 2a74352..1b2cf66 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/execution/api/ArgExecution.java +++ b/branch-core/src/main/java/xyz/auriium/branch/base/execution/ArgExecution.java @@ -1,6 +1,6 @@ -package xyz.auriium.branch.execution.api; +package xyz.auriium.branch.base.execution; -import xyz.auriium.branch.execution.EnhancedNodeContext; +import xyz.auriium.branch.base.EnhancedNodeContext; import xyz.auriium.branch.nodes.argument.ArgumentContext; import xyz.auriium.branch.nodes.argument.ArgumentContextHandler; import xyz.auriium.branch.nodes.argument.Arguments; diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/api/BasicExecution.java b/branch-core/src/main/java/xyz/auriium/branch/base/execution/BasicExecution.java similarity index 79% rename from branch-core/src/main/java/xyz/auriium/branch/execution/api/BasicExecution.java rename to branch-core/src/main/java/xyz/auriium/branch/base/execution/BasicExecution.java index 416240d..886a602 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/execution/api/BasicExecution.java +++ b/branch-core/src/main/java/xyz/auriium/branch/base/execution/BasicExecution.java @@ -1,6 +1,6 @@ -package xyz.auriium.branch.execution.api; +package xyz.auriium.branch.base.execution; -import xyz.auriium.branch.execution.EnhancedNodeContext; +import xyz.auriium.branch.base.EnhancedNodeContext; public class BasicExecution implements Execution { diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/EmptyExecutionHandler.java b/branch-core/src/main/java/xyz/auriium/branch/base/execution/EmptyExecutionHandler.java similarity index 90% rename from branch-core/src/main/java/xyz/auriium/branch/execution/EmptyExecutionHandler.java rename to branch-core/src/main/java/xyz/auriium/branch/base/execution/EmptyExecutionHandler.java index 8597c35..d8c7381 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/execution/EmptyExecutionHandler.java +++ b/branch-core/src/main/java/xyz/auriium/branch/base/execution/EmptyExecutionHandler.java @@ -19,9 +19,9 @@ * */ -package xyz.auriium.branch.execution; +package xyz.auriium.branch.base.execution; -import xyz.auriium.branch.execution.api.ExecutionHandler; +import xyz.auriium.branch.base.EnhancedNodeContext; public class EmptyExecutionHandler implements ExecutionHandler { @Override diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/api/Execution.java b/branch-core/src/main/java/xyz/auriium/branch/base/execution/Execution.java similarity index 96% rename from branch-core/src/main/java/xyz/auriium/branch/execution/api/Execution.java rename to branch-core/src/main/java/xyz/auriium/branch/base/execution/Execution.java index 1eee634..35dccd0 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/execution/api/Execution.java +++ b/branch-core/src/main/java/xyz/auriium/branch/base/execution/Execution.java @@ -19,7 +19,7 @@ * */ -package xyz.auriium.branch.execution.api; +package xyz.auriium.branch.base.execution; /** * Marker runnable representing the supplying of all required dependencies to an execution handler diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/api/ExecutionHandler.java b/branch-core/src/main/java/xyz/auriium/branch/base/execution/ExecutionHandler.java similarity index 91% rename from branch-core/src/main/java/xyz/auriium/branch/execution/api/ExecutionHandler.java rename to branch-core/src/main/java/xyz/auriium/branch/base/execution/ExecutionHandler.java index 7be418c..73be61f 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/execution/api/ExecutionHandler.java +++ b/branch-core/src/main/java/xyz/auriium/branch/base/execution/ExecutionHandler.java @@ -19,9 +19,9 @@ * */ -package xyz.auriium.branch.execution.api; +package xyz.auriium.branch.base.execution; -import xyz.auriium.branch.execution.EnhancedNodeContext; +import xyz.auriium.branch.base.EnhancedNodeContext; /** * Functional interface typically used in simple nodes that only need to do one action diff --git a/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/FallbackSearchStrategy.java b/branch-core/src/main/java/xyz/auriium/branch/base/execution/ExecutionSearchStrategy.java similarity index 71% rename from branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/FallbackSearchStrategy.java rename to branch-core/src/main/java/xyz/auriium/branch/base/execution/ExecutionSearchStrategy.java index 65b436a..7092d8b 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/FallbackSearchStrategy.java +++ b/branch-core/src/main/java/xyz/auriium/branch/base/execution/ExecutionSearchStrategy.java @@ -19,12 +19,13 @@ * */ -package xyz.auriium.branch.fallback.strategies; +package xyz.auriium.branch.base.execution; +import xyz.auriium.branch.base.NodeContext; import xyz.auriium.branch.nodes.CommandNode; -import xyz.auriium.branch.nodes.results.PreProcessSearch; -import xyz.auriium.branch.nodes.results.SearcherEquality; -import xyz.auriium.branch.nodes.results.model.Result; +import xyz.auriium.branch.results.PreProcessSearch; +import xyz.auriium.branch.results.SearcherEquality; +import xyz.auriium.branch.results.Result; /** * A strategy to define @@ -33,10 +34,10 @@ * - what happens if a node is unusable * @param */ -public interface FallbackSearchStrategy { +public interface ExecutionSearchStrategy { - Result> attemptPreprocess(T sender, String alias, String[] args, SearcherEquality equality, CommandNode baseNode); + Result> attemptPreprocess(NodeContext context, SearcherEquality equality, CommandNode baseNode); } diff --git a/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/OneBackStrategy.java b/branch-core/src/main/java/xyz/auriium/branch/base/execution/OneBackStrategy.java similarity index 85% rename from branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/OneBackStrategy.java rename to branch-core/src/main/java/xyz/auriium/branch/base/execution/OneBackStrategy.java index e39dc56..cefb62f 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/OneBackStrategy.java +++ b/branch-core/src/main/java/xyz/auriium/branch/base/execution/OneBackStrategy.java @@ -19,12 +19,15 @@ * */ -package xyz.auriium.branch.fallback.strategies; +package xyz.auriium.branch.base.execution; +import xyz.auriium.branch.base.NodeContext; import xyz.auriium.branch.interfacing.exceptional.anomalies.NoPermissionAnomaly; import xyz.auriium.branch.nodes.CommandNode; -import xyz.auriium.branch.nodes.results.*; -import xyz.auriium.branch.nodes.results.model.Result; +import xyz.auriium.branch.results.InitialSearch; +import xyz.auriium.branch.results.PreProcessSearch; +import xyz.auriium.branch.results.Result; +import xyz.auriium.branch.results.SearcherEquality; /** * @@ -48,18 +51,18 @@ * * @param */ -public class OneBackStrategy implements FallbackSearchStrategy { +public class OneBackStrategy implements ExecutionSearchStrategy { @Override - public Result> attemptPreprocess(T sender, String alias, String[] args, SearcherEquality equality, CommandNode baseNode) { + public Result> attemptPreprocess(NodeContext ctx, SearcherEquality equality, CommandNode baseNode) { - InitialSearch search = InitialSearch.of(equality, args); + InitialSearch search = InitialSearch.of(equality, ctx.getArgs()); Result> toBeExecuted = baseNode.searchNode(search); //1. Check permissions and access (preprocessing) - while (toBeExecuted.isSuccessful() && !toBeExecuted.getSuccess().getFoundNode().getPermission().attempt(sender, alias, args)) { + while (toBeExecuted.isSuccessful() && !toBeExecuted.getSuccess().getFoundNode().getPermission().attempt(ctx)) { //something is wrong with the execution (e.g. wrong args or you did something bad), pass above one. if (toBeExecuted.getSuccess().getFoundNode().equals(baseNode)) { diff --git a/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/PermissionLockoutStrategy.java b/branch-core/src/main/java/xyz/auriium/branch/base/execution/PermissionLockoutStrategy.java similarity index 69% rename from branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/PermissionLockoutStrategy.java rename to branch-core/src/main/java/xyz/auriium/branch/base/execution/PermissionLockoutStrategy.java index 793a609..c3298ba 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/fallback/strategies/PermissionLockoutStrategy.java +++ b/branch-core/src/main/java/xyz/auriium/branch/base/execution/PermissionLockoutStrategy.java @@ -19,30 +19,31 @@ * */ -package xyz.auriium.branch.fallback.strategies; +package xyz.auriium.branch.base.execution; +import xyz.auriium.branch.base.NodeContext; import xyz.auriium.branch.interfacing.exceptional.anomalies.NoPermissionAnomaly; import xyz.auriium.branch.nodes.CommandNode; -import xyz.auriium.branch.nodes.results.*; -import xyz.auriium.branch.nodes.results.model.Result; - -import java.util.ArrayList; +import xyz.auriium.branch.results.InitialSearch; +import xyz.auriium.branch.results.PreProcessSearch; +import xyz.auriium.branch.results.Result; +import xyz.auriium.branch.results.SearcherEquality; /** * Simple fallback strategy that if the sender has no permission to execute the command they are sent a failing response. * @param */ -public class PermissionLockoutStrategy implements FallbackSearchStrategy { +public class PermissionLockoutStrategy implements ExecutionSearchStrategy { @Override - public Result> attemptPreprocess(T sender, String alias, String[] args, SearcherEquality equality, CommandNode baseNode) { + public Result> attemptPreprocess(NodeContext ctx, SearcherEquality equality, CommandNode baseNode) { - InitialSearch search = InitialSearch.of(equality,args); + InitialSearch search = InitialSearch.of(equality, ctx.getArgs()); Result> toBeExecuted = baseNode.searchNode(search); //peak object oriented code - if (toBeExecuted.isSuccessful() && !toBeExecuted.getSuccess().getFoundNode().getPermission().attempt(sender, alias, args)) { + if (toBeExecuted.isSuccessful() && !toBeExecuted.getSuccess().getFoundNode().getPermission().attempt(ctx)) { return Result.fail(new NoPermissionAnomaly(toBeExecuted.getSuccess().getFoundNode().getPermission().failureIdentifiableName())); } diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/blocks/ArgumentBlock.java b/branch-core/src/main/java/xyz/auriium/branch/base/execution/blocks/ArgumentBlock.java similarity index 85% rename from branch-core/src/main/java/xyz/auriium/branch/execution/blocks/ArgumentBlock.java rename to branch-core/src/main/java/xyz/auriium/branch/base/execution/blocks/ArgumentBlock.java index 19db11a..63d3813 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/execution/blocks/ArgumentBlock.java +++ b/branch-core/src/main/java/xyz/auriium/branch/base/execution/blocks/ArgumentBlock.java @@ -1,7 +1,4 @@ -package xyz.auriium.branch.execution.blocks; - -import xyz.auriium.branch.execution.Block; -import xyz.auriium.branch.execution.BlockType; +package xyz.auriium.branch.base.execution.blocks; public class ArgumentBlock implements Block { diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/Block.java b/branch-core/src/main/java/xyz/auriium/branch/base/execution/blocks/Block.java similarity index 96% rename from branch-core/src/main/java/xyz/auriium/branch/execution/Block.java rename to branch-core/src/main/java/xyz/auriium/branch/base/execution/blocks/Block.java index a53815e..9d635e8 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/execution/Block.java +++ b/branch-core/src/main/java/xyz/auriium/branch/base/execution/blocks/Block.java @@ -19,9 +19,7 @@ * */ -package xyz.auriium.branch.execution; - -import xyz.auriium.branch.execution.blocks.BracketPattern; +package xyz.auriium.branch.base.execution.blocks; /** * Represents a Branch-provided identification structure for the identifier of specific structures diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/BlockType.java b/branch-core/src/main/java/xyz/auriium/branch/base/execution/blocks/BlockType.java similarity index 94% rename from branch-core/src/main/java/xyz/auriium/branch/execution/BlockType.java rename to branch-core/src/main/java/xyz/auriium/branch/base/execution/blocks/BlockType.java index c69c12b..682a7fc 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/execution/BlockType.java +++ b/branch-core/src/main/java/xyz/auriium/branch/base/execution/blocks/BlockType.java @@ -1,4 +1,4 @@ -package xyz.auriium.branch.execution; +package xyz.auriium.branch.base.execution.blocks; public enum BlockType { diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/blocks/BracketPattern.java b/branch-core/src/main/java/xyz/auriium/branch/base/execution/blocks/BracketPattern.java similarity index 93% rename from branch-core/src/main/java/xyz/auriium/branch/execution/blocks/BracketPattern.java rename to branch-core/src/main/java/xyz/auriium/branch/base/execution/blocks/BracketPattern.java index 34f05f4..839962d 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/execution/blocks/BracketPattern.java +++ b/branch-core/src/main/java/xyz/auriium/branch/base/execution/blocks/BracketPattern.java @@ -1,4 +1,4 @@ -package xyz.auriium.branch.execution.blocks; +package xyz.auriium.branch.base.execution.blocks; public class BracketPattern { diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/blocks/EndpointBlock.java b/branch-core/src/main/java/xyz/auriium/branch/base/execution/blocks/EndpointBlock.java similarity index 81% rename from branch-core/src/main/java/xyz/auriium/branch/execution/blocks/EndpointBlock.java rename to branch-core/src/main/java/xyz/auriium/branch/base/execution/blocks/EndpointBlock.java index c7a43da..0f03b20 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/execution/blocks/EndpointBlock.java +++ b/branch-core/src/main/java/xyz/auriium/branch/base/execution/blocks/EndpointBlock.java @@ -1,7 +1,4 @@ -package xyz.auriium.branch.execution.blocks; - -import xyz.auriium.branch.execution.Block; -import xyz.auriium.branch.execution.BlockType; +package xyz.auriium.branch.base.execution.blocks; public class EndpointBlock implements Block { diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/blocks/GroupBlock.java b/branch-core/src/main/java/xyz/auriium/branch/base/execution/blocks/GroupBlock.java similarity index 80% rename from branch-core/src/main/java/xyz/auriium/branch/execution/blocks/GroupBlock.java rename to branch-core/src/main/java/xyz/auriium/branch/base/execution/blocks/GroupBlock.java index 650f1e6..6555fba 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/execution/blocks/GroupBlock.java +++ b/branch-core/src/main/java/xyz/auriium/branch/base/execution/blocks/GroupBlock.java @@ -1,7 +1,4 @@ -package xyz.auriium.branch.execution.blocks; - -import xyz.auriium.branch.execution.Block; -import xyz.auriium.branch.execution.BlockType; +package xyz.auriium.branch.base.execution.blocks; public class GroupBlock implements Block { diff --git a/branch-core/src/main/java/xyz/auriium/branch/fallback/permissions/EmptyPermission.java b/branch-core/src/main/java/xyz/auriium/branch/base/permissions/EmptyPermission.java similarity index 89% rename from branch-core/src/main/java/xyz/auriium/branch/fallback/permissions/EmptyPermission.java rename to branch-core/src/main/java/xyz/auriium/branch/base/permissions/EmptyPermission.java index 12ac124..5dc8c91 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/fallback/permissions/EmptyPermission.java +++ b/branch-core/src/main/java/xyz/auriium/branch/base/permissions/EmptyPermission.java @@ -19,7 +19,9 @@ * */ -package xyz.auriium.branch.fallback.permissions; +package xyz.auriium.branch.base.permissions; + +import xyz.auriium.branch.base.NodeContext; /** * Represents a permission that is always true @@ -32,7 +34,7 @@ public class EmptyPermission implements Permission { EmptyPermission() {} @Override - public boolean attempt(T sender, String alias, String[] args) { + public boolean attempt(NodeContext nodeContext) { return true; } diff --git a/branch-core/src/main/java/xyz/auriium/branch/fallback/permissions/Permission.java b/branch-core/src/main/java/xyz/auriium/branch/base/permissions/Permission.java similarity index 69% rename from branch-core/src/main/java/xyz/auriium/branch/fallback/permissions/Permission.java rename to branch-core/src/main/java/xyz/auriium/branch/base/permissions/Permission.java index 2f6936c..a338e37 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/fallback/permissions/Permission.java +++ b/branch-core/src/main/java/xyz/auriium/branch/base/permissions/Permission.java @@ -19,9 +19,9 @@ * */ -package xyz.auriium.branch.fallback.permissions; +package xyz.auriium.branch.base.permissions; -import xyz.auriium.branch.execution.NodeContext; +import xyz.auriium.branch.base.NodeContext; /** * Represents the accessibility predicate of a command -> whether a command can be executed or not @@ -29,17 +29,13 @@ public interface Permission { /** - * Checks whether the sender has acccess or not - * @param sender sender - * @param alias alias - * @param args args - * @return true if so, false if not + * Method describing whether the permission accepts the context + * + * + * @param nodeContext ctx + * @return true if permission is had, otherwise false */ - boolean attempt(T sender, String alias, String[] args); //because fuck you - - default boolean attempt(NodeContext nodeContext) { - return attempt(nodeContext.getSender(),nodeContext.getAlias(), nodeContext.getArgs()); - } + boolean attempt(NodeContext nodeContext); /** * Represents the name shown when the permission fails. diff --git a/branch-core/src/main/java/xyz/auriium/branch/fallback/permissions/PredicatePermission.java b/branch-core/src/main/java/xyz/auriium/branch/base/permissions/PredicatePermission.java similarity index 78% rename from branch-core/src/main/java/xyz/auriium/branch/fallback/permissions/PredicatePermission.java rename to branch-core/src/main/java/xyz/auriium/branch/base/permissions/PredicatePermission.java index 448ed5b..44cba9a 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/fallback/permissions/PredicatePermission.java +++ b/branch-core/src/main/java/xyz/auriium/branch/base/permissions/PredicatePermission.java @@ -19,7 +19,9 @@ * */ -package xyz.auriium.branch.fallback.permissions; +package xyz.auriium.branch.base.permissions; + +import xyz.auriium.branch.base.NodeContext; import java.util.function.Predicate; @@ -30,16 +32,16 @@ public class PredicatePermission implements Permission { private final String easyName; - private final Predicate predicate; + private final Predicate> predicate; - public PredicatePermission(String easyName, Predicate predicate) { + public PredicatePermission(String easyName, Predicate> predicate) { this.easyName = easyName; this.predicate = predicate; } @Override - public boolean attempt(T sender, String alias, String[] args) { - return predicate.test(sender); + public boolean attempt(NodeContext ctx) { + return predicate.test(ctx); } @Override diff --git a/branch-core/src/main/java/xyz/auriium/branch/fallback/permissions/StringPermission.java b/branch-core/src/main/java/xyz/auriium/branch/base/permissions/StringPermission.java similarity index 55% rename from branch-core/src/main/java/xyz/auriium/branch/fallback/permissions/StringPermission.java rename to branch-core/src/main/java/xyz/auriium/branch/base/permissions/StringPermission.java index 22936da..4b5d971 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/fallback/permissions/StringPermission.java +++ b/branch-core/src/main/java/xyz/auriium/branch/base/permissions/StringPermission.java @@ -1,4 +1,6 @@ -package xyz.auriium.branch.fallback.permissions; +package xyz.auriium.branch.base.permissions; + +import xyz.auriium.branch.base.NodeContext; public class StringPermission implements Permission { @@ -9,12 +11,12 @@ public StringPermission(String permissionNode) { } @Override - public boolean attempt(T sender, String alias, String[] args) { - return false; + public boolean attempt(NodeContext nodeContext) { + return nodeContext.hasStringPermissible(permissionNode); } @Override public String failureIdentifiableName() { - return null; + return permissionNode; } } diff --git a/branch-core/src/main/java/xyz/auriium/branch/base/suggestion/AbstractSuggestionSearchStrategy.java b/branch-core/src/main/java/xyz/auriium/branch/base/suggestion/AbstractSuggestionSearchStrategy.java new file mode 100644 index 0000000..88006ae --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/base/suggestion/AbstractSuggestionSearchStrategy.java @@ -0,0 +1,46 @@ +package xyz.auriium.branch.base.suggestion; + +import xyz.auriium.branch.base.NodeContext; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +/** + * Abstract suggestion strategy handler that + * @param + */ +public abstract class AbstractSuggestionSearchStrategy implements SuggestionSearchStrategy { + + @Override + public List order(List> suggestions, NodeContext ctx) { + String[] strings = ctx.getArgs(); + + return copyPartialMatches(strings[strings.length - 1], order(suggestions, ctx)); + } + + abstract List orderThen(List> suggestions, NodeContext ctx); + + private List copyPartialMatches(final String token, final Collection originals) throws UnsupportedOperationException, IllegalArgumentException { + + List results = new ArrayList<>(); + + for (String string : originals) { + + if (startsWithIgnoreCase(string, token)) { + results.add(string); + } + + } + + return results; + } + + private boolean startsWithIgnoreCase(final String string, final String prefix) throws IllegalArgumentException, NullPointerException { + if (string.length() < prefix.length()) { + return false; + } + return string.regionMatches(true, 0, prefix, 0, prefix.length()); + } + +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/base/suggestion/CommonSuggestionSearchStrategy.java b/branch-core/src/main/java/xyz/auriium/branch/base/suggestion/CommonSuggestionSearchStrategy.java new file mode 100644 index 0000000..3cd4e14 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/base/suggestion/CommonSuggestionSearchStrategy.java @@ -0,0 +1,32 @@ +package xyz.auriium.branch.base.suggestion; + +import xyz.auriium.branch.base.NodeContext; + +import java.util.ArrayList; +import java.util.List; + +public class CommonSuggestionSearchStrategy extends AbstractSuggestionSearchStrategy { + + private final boolean hideNoPermissions; + + public CommonSuggestionSearchStrategy(boolean hideNoPermissions) { + this.hideNoPermissions = hideNoPermissions; + } + + @Override + List orderThen(List> suggestions, NodeContext ctx) { + + List strings = new ArrayList<>(); + + for (Suggestion suggestion : suggestions) { + if (hideNoPermissions) { + if (!suggestion.getPermission().attempt(ctx)) continue; + } + + + strings.add(suggestion.getIdentifier().getLabel()); + } + + return strings; + } +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/base/suggestion/Suggestion.java b/branch-core/src/main/java/xyz/auriium/branch/base/suggestion/Suggestion.java new file mode 100644 index 0000000..7d1a7db --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/base/suggestion/Suggestion.java @@ -0,0 +1,23 @@ +package xyz.auriium.branch.base.suggestion; + +import xyz.auriium.branch.base.execution.blocks.Block; +import xyz.auriium.branch.base.permissions.Permission; + +public class Suggestion { + + private final Permission permission; + private final Block identifier; + + public Suggestion(Permission permission, Block identifier) { + this.permission = permission; + this.identifier = identifier; + } + + public Permission getPermission() { + return permission; + } + + public Block getIdentifier() { + return identifier; + } +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/api/SuggestionHandler.java b/branch-core/src/main/java/xyz/auriium/branch/base/suggestion/SuggestionHandler.java similarity index 84% rename from branch-core/src/main/java/xyz/auriium/branch/execution/api/SuggestionHandler.java rename to branch-core/src/main/java/xyz/auriium/branch/base/suggestion/SuggestionHandler.java index ba53429..b726429 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/execution/api/SuggestionHandler.java +++ b/branch-core/src/main/java/xyz/auriium/branch/base/suggestion/SuggestionHandler.java @@ -19,10 +19,9 @@ * */ -package xyz.auriium.branch.execution.api; +package xyz.auriium.branch.base.suggestion; -import xyz.auriium.branch.execution.Block; -import xyz.auriium.branch.execution.NodeContext; +import xyz.auriium.branch.base.NodeContext; import java.util.List; @@ -33,6 +32,6 @@ @FunctionalInterface public interface SuggestionHandler { - List handle(NodeContext context); + List handle(NodeContext context); } diff --git a/branch-core/src/main/java/xyz/auriium/branch/base/suggestion/SuggestionSearchStrategy.java b/branch-core/src/main/java/xyz/auriium/branch/base/suggestion/SuggestionSearchStrategy.java new file mode 100644 index 0000000..ea28ec7 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/base/suggestion/SuggestionSearchStrategy.java @@ -0,0 +1,16 @@ +package xyz.auriium.branch.base.suggestion; + +import xyz.auriium.branch.base.NodeContext; + +import java.util.List; + +/** + * Retrieves a single suggestion completion based on contextual arguments: likely delegates to the nodes themselves + * as well as an adapter for conversion of type + * @param input type + */ +public interface SuggestionSearchStrategy { + + List order(List> suggestions, NodeContext ctx); + +} diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/base/RunNodeBase.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/base/RunNodeBase.java deleted file mode 100644 index a118b65..0000000 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/base/RunNodeBase.java +++ /dev/null @@ -1,26 +0,0 @@ -package xyz.auriium.branch.centralized.base; - -import xyz.auriium.branch.centralized.typeadapter.ManagerAdapter; -import xyz.auriium.branch.execution.ContextProvider; -import xyz.auriium.branch.execution.api.Execution; -import xyz.auriium.branch.fallback.strategies.FallbackSearchStrategy; -import xyz.auriium.branch.interfacing.exceptional.AnomalyHandler; -import xyz.auriium.branch.nodes.CommandNode; -import xyz.auriium.branch.nodes.results.SearcherEquality; - -/** - * Nodebase that simply runs the execution runnable - * @param input type - * @param adapted type - */ -public abstract class RunNodeBase extends AbstractNodeBase { - - protected RunNodeBase(ManagerAdapter adapter, AnomalyHandler handler, CommandNode baseNode, FallbackSearchStrategy strategy, ContextProvider provider, SearcherEquality equality) { - super(adapter, handler, baseNode, strategy, provider, equality); - } - - @Override - void submitExecution(Execution execution) { - execution.run(); - } -} diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/information/help/HelpEntry.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/information/help/HelpEntry.java deleted file mode 100644 index b045f73..0000000 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/information/help/HelpEntry.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * - * Branch - * Copyright © 2021 Aurium - * - * Branch is free software: you can redistribute it and/or modify - * It under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * Branch is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Branch. If not, see - * and navigate to version 3 of the GNU Affero General Public License. - * - */ - -package xyz.auriium.branch.centralized.information.help; - -public interface HelpEntry { -} diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/information/help/Shit.java b/branch-core/src/main/java/xyz/auriium/branch/centralized/information/help/Shit.java deleted file mode 100644 index 514ebc4..0000000 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/information/help/Shit.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * - * Branch - * Copyright © 2021 Aurium - * - * Branch is free software: you can redistribute it and/or modify - * It under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * Branch is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Branch. If not, see - * and navigate to version 3 of the GNU Affero General Public License. - * - */ - -package xyz.auriium.branch.centralized.information.help; - -public class Shit { - - //commandnodes or maybe their branchhandlers all need to return a Description -} diff --git a/branch-core/src/main/java/xyz/auriium/branch/execution/EmptySuggestionHandler.java b/branch-core/src/main/java/xyz/auriium/branch/execution/EmptySuggestionHandler.java deleted file mode 100644 index c194cd6..0000000 --- a/branch-core/src/main/java/xyz/auriium/branch/execution/EmptySuggestionHandler.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * - * Branch - * Copyright © 2021 Aurium - * - * Branch is free software: you can redistribute it and/or modify - * It under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * Branch is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Branch. If not, see - * and navigate to version 3 of the GNU Affero General Public License. - * - */ - -package xyz.auriium.branch.execution; - -import xyz.auriium.branch.execution.api.SuggestionHandler; - -import java.util.ArrayList; -import java.util.List; - -public class EmptySuggestionHandler implements SuggestionHandler { - - EmptySuggestionHandler() {} - - private static final List empty = new ArrayList<>(); - private static final EmptySuggestionHandler INSTANCE = new EmptySuggestionHandler<>(); - - @Override - public List handle(NodeContext adapter) { - return empty; - } - - @SuppressWarnings("unchecked") - public static EmptySuggestionHandler instance() { - return (EmptySuggestionHandler) INSTANCE; - } -} diff --git a/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/anomalies/TooFewInputsInternalAnomaly.java b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/anomalies/TooFewInputsInternalAnomaly.java index 5b665fc..24d1087 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/anomalies/TooFewInputsInternalAnomaly.java +++ b/branch-core/src/main/java/xyz/auriium/branch/interfacing/exceptional/anomalies/TooFewInputsInternalAnomaly.java @@ -1,6 +1,5 @@ package xyz.auriium.branch.interfacing.exceptional.anomalies; -import xyz.auriium.branch.execution.blocks.ArgumentBlock; import xyz.auriium.branch.interfacing.exceptional.Anomaly; import xyz.auriium.branch.interfacing.exceptional.AnomalyType; diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/Builder.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/Builder.java deleted file mode 100644 index 0ba044f..0000000 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/Builder.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * - * Branch - * Copyright © 2021 Aurium - * - * Branch is free software: you can redistribute it and/or modify - * It under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * Branch is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Branch. If not, see - * and navigate to version 3 of the GNU Affero General Public License. - * - */ - -package xyz.auriium.branch.nodes; - - -public interface Builder{ - - CommandNode build(); - -} diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/CommandNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/CommandNode.java index ae37353..ecda1f1 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/CommandNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/CommandNode.java @@ -21,14 +21,16 @@ package xyz.auriium.branch.nodes; -import xyz.auriium.branch.execution.NodeContext; -import xyz.auriium.branch.execution.api.Execution; -import xyz.auriium.branch.execution.api.SuggestionHandler; -import xyz.auriium.branch.centralized.information.description.Description; -import xyz.auriium.branch.fallback.permissions.Permission; -import xyz.auriium.branch.nodes.results.model.Result; -import xyz.auriium.branch.nodes.results.InitialSearch; -import xyz.auriium.branch.nodes.results.PreProcessSearch; +import xyz.auriium.branch.base.NodeContext; +import xyz.auriium.branch.base.execution.Execution; +import xyz.auriium.branch.base.suggestion.Suggestion; +import xyz.auriium.branch.nodes.description.Description; +import xyz.auriium.branch.base.permissions.Permission; +import xyz.auriium.branch.results.Result; +import xyz.auriium.branch.results.InitialSearch; +import xyz.auriium.branch.results.PreProcessSearch; + +import java.util.List; /** * Base object @@ -38,7 +40,12 @@ public interface CommandNode { //int getExpectedConsumeAmount() //used to check how much was expected as you pass through vs how much was received, among other htings. - SuggestionHandler getSuggestionHandler(); + /** + * Suggestion-handling analogy to + * + * @return returns a result containing all suggestions + */ + Result>> searchSuggestion(NodeContext ctx, PreProcessSearch input); /** * Method called first. Locates the node to execute and adds all found nodes along the path to the SearcherOutput @@ -55,7 +62,7 @@ public interface CommandNode { * * @return execution of the node */ - Result> searchExecute(NodeContext context, PreProcessSearch input); + Result> searchExecute(NodeContext ctx, PreProcessSearch input); /** diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/EndpointNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/EndpointNode.java index 7917c2e..7d15e98 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/EndpointNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/EndpointNode.java @@ -21,12 +21,15 @@ package xyz.auriium.branch.nodes; -import xyz.auriium.branch.execution.EmptySuggestionHandler; -import xyz.auriium.branch.execution.api.SuggestionHandler; -import xyz.auriium.branch.execution.blocks.EndpointBlock; -import xyz.auriium.branch.nodes.results.InitialSearch; -import xyz.auriium.branch.nodes.results.PreProcessSearch; -import xyz.auriium.branch.nodes.results.model.Result; +import xyz.auriium.branch.base.NodeContext; +import xyz.auriium.branch.base.execution.blocks.EndpointBlock; +import xyz.auriium.branch.base.suggestion.Suggestion; +import xyz.auriium.branch.results.InitialSearch; +import xyz.auriium.branch.results.PreProcessSearch; +import xyz.auriium.branch.results.Result; + +import java.util.ArrayList; +import java.util.List; /** * A node that cannot point to any node other than itself (and therefore ends the branching of a node-path) @@ -37,12 +40,13 @@ public interface EndpointNode extends IdentifiableNode { EndpointBlock getIdentifier(); @Override - default SuggestionHandler getSuggestionHandler() { - return EmptySuggestionHandler.instance(); + default Result>> searchSuggestion(NodeContext ctx, PreProcessSearch input) { + return Result.success(new ArrayList<>()); } @Override default Result> searchNode(InitialSearch input) { return Result.success(PreProcessSearch.generate(this,input)); //new generation } + } diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/IdentifiableNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/IdentifiableNode.java index 74620c2..2e236ed 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/IdentifiableNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/IdentifiableNode.java @@ -21,7 +21,7 @@ package xyz.auriium.branch.nodes; -import xyz.auriium.branch.execution.Block; +import xyz.auriium.branch.base.execution.blocks.Block; public interface IdentifiableNode extends CommandNode { diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/ProcessingNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/ProcessingNode.java index bcbefe8..3f671be 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/ProcessingNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/ProcessingNode.java @@ -1,12 +1,12 @@ package xyz.auriium.branch.nodes; -import xyz.auriium.branch.execution.DelegatingEnhancedContext; -import xyz.auriium.branch.execution.EnhancedNodeContext; -import xyz.auriium.branch.execution.NodeContext; -import xyz.auriium.branch.execution.api.Execution; -import xyz.auriium.branch.nodes.results.PreProcessSearch; -import xyz.auriium.branch.nodes.results.SearchPair; -import xyz.auriium.branch.nodes.results.model.Result; +import xyz.auriium.branch.base.DelegatingEnhancedContext; +import xyz.auriium.branch.base.EnhancedNodeContext; +import xyz.auriium.branch.base.NodeContext; +import xyz.auriium.branch.base.execution.Execution; +import xyz.auriium.branch.results.PreProcessSearch; +import xyz.auriium.branch.results.SearchPair; +import xyz.auriium.branch.results.Result; public interface ProcessingNode extends EndpointNode { @@ -14,14 +14,14 @@ public interface ProcessingNode extends EndpointNode { Result> searchStepTwoExecute(EnhancedNodeContext context, O object); @Override - default Result> searchExecute(NodeContext context, PreProcessSearch input) { + default Result> searchExecute(NodeContext ctx, PreProcessSearch input) { - var pairResult = searchStepOneExecute(context, input); + var pairResult = searchStepOneExecute(ctx, input); if (!pairResult.isSuccessful()) return Result.transmuteFail(pairResult); SearchPair searchPair = pairResult.getSuccess(); - return searchStepTwoExecute(new DelegatingEnhancedContext<>(context, searchPair.getSearch()), searchPair.getObject()); + return searchStepTwoExecute(new DelegatingEnhancedContext<>(ctx, searchPair.getSearch()), searchPair.getObject()); } } diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/SimpleProcessingNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/SimpleProcessingNode.java index 3efb7b4..9bdf7ee 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/SimpleProcessingNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/SimpleProcessingNode.java @@ -1,12 +1,12 @@ package xyz.auriium.branch.nodes; -import xyz.auriium.branch.execution.EnhancedNodeContext; -import xyz.auriium.branch.execution.NodeContext; -import xyz.auriium.branch.execution.api.Execution; -import xyz.auriium.branch.nodes.results.PostProcessSearch; -import xyz.auriium.branch.nodes.results.PreProcessSearch; -import xyz.auriium.branch.nodes.results.SearchPair; -import xyz.auriium.branch.nodes.results.model.Result; +import xyz.auriium.branch.base.EnhancedNodeContext; +import xyz.auriium.branch.base.NodeContext; +import xyz.auriium.branch.base.execution.Execution; +import xyz.auriium.branch.results.PostProcessSearch; +import xyz.auriium.branch.results.PreProcessSearch; +import xyz.auriium.branch.results.SearchPair; +import xyz.auriium.branch.results.Result; /** * Node that doesn't give a shit but still handles enhancedNodeContexts diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/AbstractArgNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/AbstractArgNode.java index 233180f..92a8afe 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/AbstractArgNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/AbstractArgNode.java @@ -1,20 +1,16 @@ package xyz.auriium.branch.nodes.argument; -import xyz.auriium.branch.execution.EnhancedNodeContext; +import xyz.auriium.branch.base.EnhancedNodeContext; import xyz.auriium.branch.interfacing.exceptional.anomalies.TooFewInputsExternalAnomaly; -import xyz.auriium.branch.interfacing.exceptional.anomalies.TooFewInputsInternalAnomaly; -import xyz.auriium.branch.execution.Block; -import xyz.auriium.branch.execution.NodeContext; -import xyz.auriium.branch.execution.api.ArgExecution; -import xyz.auriium.branch.execution.api.Execution; -import xyz.auriium.branch.execution.api.SuggestionHandler; +import xyz.auriium.branch.base.NodeContext; +import xyz.auriium.branch.base.execution.ArgExecution; +import xyz.auriium.branch.base.execution.Execution; import xyz.auriium.branch.nodes.ProcessingNode; import xyz.auriium.branch.nodes.argument.model.ContextualBaseArgument; -import xyz.auriium.branch.nodes.results.PostProcessSearch; -import xyz.auriium.branch.nodes.results.PreProcessSearch; -import xyz.auriium.branch.nodes.results.SearchPair; -import xyz.auriium.branch.nodes.results.model.Result; -import xyz.auriium.branch.nodes.EndpointNode; +import xyz.auriium.branch.results.PostProcessSearch; +import xyz.auriium.branch.results.PreProcessSearch; +import xyz.auriium.branch.results.SearchPair; +import xyz.auriium.branch.results.Result; import java.util.*; @@ -24,8 +20,13 @@ public abstract class AbstractArgNode implements ProcessingNode protected abstract ArgumentContextHandler getContextHandler(); @Override - public SuggestionHandler getSuggestionHandler() { - return null; //TODO implement + public Result> searchExecute(NodeContext ctx, PreProcessSearch input) { + + for (ContextualBaseArgument argument : getArguments()) { + + } + + return Result.success(null); } @Override @@ -48,6 +49,8 @@ public Result> searchStepOneExecute(NodeContext cont return Result.fail( new TooFewInputsExternalAnomaly() ); //throw + + } diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ArgNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ArgNode.java index c7cf9ab..631643c 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ArgNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ArgNode.java @@ -1,12 +1,10 @@ package xyz.auriium.branch.nodes.argument; -import xyz.auriium.branch.execution.Block; -import xyz.auriium.branch.execution.blocks.ArgumentBlock; -import xyz.auriium.branch.execution.blocks.EndpointBlock; -import xyz.auriium.branch.fallback.permissions.EmptyPermission; -import xyz.auriium.branch.fallback.permissions.Permission; -import xyz.auriium.branch.centralized.information.description.Description; -import xyz.auriium.branch.centralized.information.description.StringDescription; +import xyz.auriium.branch.base.execution.blocks.EndpointBlock; +import xyz.auriium.branch.base.permissions.EmptyPermission; +import xyz.auriium.branch.base.permissions.Permission; +import xyz.auriium.branch.nodes.description.Description; +import xyz.auriium.branch.nodes.description.StringDescription; import xyz.auriium.branch.nodes.argument.model.ContextualBaseArgument; import java.util.List; diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ArgumentContext.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ArgumentContext.java index 291e741..87cd493 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ArgumentContext.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/ArgumentContext.java @@ -21,7 +21,7 @@ package xyz.auriium.branch.nodes.argument; -import xyz.auriium.branch.execution.NodeContext; +import xyz.auriium.branch.base.NodeContext; public class ArgumentContext { diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/implement/DefaultingArgNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/impl/DefaultingArgNode.java similarity index 51% rename from branch-core/src/main/java/xyz/auriium/branch/nodes/argument/implement/DefaultingArgNode.java rename to branch-core/src/main/java/xyz/auriium/branch/nodes/argument/impl/DefaultingArgNode.java index af7e944..1584a3f 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/implement/DefaultingArgNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/impl/DefaultingArgNode.java @@ -1,7 +1,7 @@ -package xyz.auriium.branch.nodes.argument.implement; +package xyz.auriium.branch.nodes.argument.impl; -import xyz.auriium.branch.fallback.permissions.EmptyPermission; -import xyz.auriium.branch.fallback.permissions.Permission; +import xyz.auriium.branch.base.permissions.EmptyPermission; +import xyz.auriium.branch.base.permissions.Permission; public abstract class DefaultingArgNode extends ImplementableArgNode { diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/implement/ImplementableArgNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/impl/ImplementableArgNode.java similarity index 91% rename from branch-core/src/main/java/xyz/auriium/branch/nodes/argument/implement/ImplementableArgNode.java rename to branch-core/src/main/java/xyz/auriium/branch/nodes/argument/impl/ImplementableArgNode.java index 5962217..db8c1b5 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/implement/ImplementableArgNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/impl/ImplementableArgNode.java @@ -1,4 +1,4 @@ -package xyz.auriium.branch.nodes.argument.implement; +package xyz.auriium.branch.nodes.argument.impl; import xyz.auriium.branch.nodes.argument.AbstractArgNode; import xyz.auriium.branch.nodes.argument.ArgumentContext; diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/model/ContextualBaseArgument.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/model/ContextualBaseArgument.java index aca1f92..9ea678e 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/model/ContextualBaseArgument.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/model/ContextualBaseArgument.java @@ -1,8 +1,7 @@ package xyz.auriium.branch.nodes.argument.model; -import xyz.auriium.branch.execution.Block; -import xyz.auriium.branch.execution.blocks.ArgumentBlock; -import xyz.auriium.branch.nodes.results.model.Result; +import xyz.auriium.branch.base.execution.blocks.ArgumentBlock; +import xyz.auriium.branch.results.Result; import java.util.List; import java.util.Optional; @@ -57,4 +56,6 @@ public interface ContextualBaseArgument { */ Result parse(T sender, String alias, List reserved); + + } diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/model/SingleContextualArgument.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/model/SingleContextualArgument.java index ed7d3a1..8b7f341 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/model/SingleContextualArgument.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/model/SingleContextualArgument.java @@ -1,8 +1,6 @@ package xyz.auriium.branch.nodes.argument.model; -import xyz.auriium.branch.execution.Block; -import xyz.auriium.branch.nodes.argument.model.ContextualBaseArgument; -import xyz.auriium.branch.nodes.results.model.Result; +import xyz.auriium.branch.results.Result; import java.util.List; diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/types/StringArgument.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/types/StringArgument.java index d8ffbd2..0cce566 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/types/StringArgument.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/argument/types/StringArgument.java @@ -1,8 +1,8 @@ package xyz.auriium.branch.nodes.argument.types; -import xyz.auriium.branch.execution.blocks.ArgumentBlock; +import xyz.auriium.branch.base.execution.blocks.ArgumentBlock; import xyz.auriium.branch.nodes.argument.model.SingleIgnorantArgument; -import xyz.auriium.branch.nodes.results.model.Result; +import xyz.auriium.branch.results.Result; import java.util.Objects; import java.util.Optional; diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/BranchingNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/BranchingNode.java index 8542f4d..f62f1c6 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/BranchingNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/branching/BranchingNode.java @@ -21,19 +21,18 @@ package xyz.auriium.branch.nodes.branching; -import xyz.auriium.branch.centralized.information.description.StringDescription; -import xyz.auriium.branch.execution.Block; -import xyz.auriium.branch.execution.api.Execution; -import xyz.auriium.branch.execution.NodeContext; -import xyz.auriium.branch.execution.api.SuggestionHandler; -import xyz.auriium.branch.centralized.information.description.Description; -import xyz.auriium.branch.execution.blocks.GroupBlock; -import xyz.auriium.branch.fallback.permissions.EmptyPermission; +import xyz.auriium.branch.base.suggestion.Suggestion; +import xyz.auriium.branch.nodes.description.StringDescription; +import xyz.auriium.branch.base.execution.Execution; +import xyz.auriium.branch.base.NodeContext; +import xyz.auriium.branch.nodes.description.Description; +import xyz.auriium.branch.base.execution.blocks.GroupBlock; +import xyz.auriium.branch.base.permissions.EmptyPermission; import xyz.auriium.branch.nodes.IdentifiableNode; -import xyz.auriium.branch.fallback.permissions.Permission; -import xyz.auriium.branch.nodes.results.model.Result; -import xyz.auriium.branch.nodes.results.InitialSearch; -import xyz.auriium.branch.nodes.results.PreProcessSearch; +import xyz.auriium.branch.base.permissions.Permission; +import xyz.auriium.branch.results.Result; +import xyz.auriium.branch.results.InitialSearch; +import xyz.auriium.branch.results.PreProcessSearch; import java.util.ArrayList; import java.util.List; @@ -51,24 +50,25 @@ public class BranchingNode implements IdentifiableNode { private final PreStoredList nodes; private final Description description; private final Permission permission; - private final SuggestionHandler suggestion; public BranchingNode(String identifier, PreStoredList nodes, Description description, Permission permission) { this.nodes = nodes; this.identifier = new GroupBlock(identifier); this.description = description; this.permission = permission; - this.suggestion = (ctx) -> { - List strings = new ArrayList<>(); + } - for (IdentifiableNode node : nodes.getContents()) { - if (node.getPermission().attempt(ctx)) { - strings.add(node.getIdentifier()); - } - } + @Override + public Result>> searchSuggestion(NodeContext ctx, PreProcessSearch input) { + + List> suggestions = new ArrayList<>(); + + for (IdentifiableNode node : nodes.getContents()) { + suggestions.add(new Suggestion<>(node.getPermission(), node.getIdentifier())); + } + + return Result.success(suggestions); - return strings; - }; } @Override @@ -86,11 +86,6 @@ public Permission getPermission() { return permission; } - @Override - public SuggestionHandler getSuggestionHandler() { - return suggestion; - } - @Override public Result> searchNode(InitialSearch input) { @@ -111,8 +106,8 @@ public Result> searchNode(InitialSearch input) { } @Override - public Result> searchExecute(NodeContext context, PreProcessSearch input) { - return nodes.getSideNode().searchExecute(context, input); + public Result> searchExecute(NodeContext ctx, PreProcessSearch input) { + return nodes.getSideNode().searchExecute(ctx, input); } public static BranchingNode of(String identifier, PreStoredList nodes, Description description, Permission permission) { diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/information/description/Description.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/description/Description.java similarity index 93% rename from branch-core/src/main/java/xyz/auriium/branch/centralized/information/description/Description.java rename to branch-core/src/main/java/xyz/auriium/branch/nodes/description/Description.java index 6491af0..551ea6f 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/information/description/Description.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/description/Description.java @@ -19,7 +19,7 @@ * */ -package xyz.auriium.branch.centralized.information.description; +package xyz.auriium.branch.nodes.description; //TODO make functional interface in order to generate str public interface Description { diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/information/description/DescriptionContext.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/description/DescriptionContext.java similarity index 84% rename from branch-core/src/main/java/xyz/auriium/branch/centralized/information/description/DescriptionContext.java rename to branch-core/src/main/java/xyz/auriium/branch/nodes/description/DescriptionContext.java index 2f335fa..1695c88 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/information/description/DescriptionContext.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/description/DescriptionContext.java @@ -1,4 +1,4 @@ -package xyz.auriium.branch.centralized.information.description; +package xyz.auriium.branch.nodes.description; /** * everything a description needs (this node name, etc etc etc etc) diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/information/description/GeneratingDescription.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/description/GeneratingDescription.java similarity index 89% rename from branch-core/src/main/java/xyz/auriium/branch/centralized/information/description/GeneratingDescription.java rename to branch-core/src/main/java/xyz/auriium/branch/nodes/description/GeneratingDescription.java index fbdbb0c..6fc9427 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/information/description/GeneratingDescription.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/description/GeneratingDescription.java @@ -1,4 +1,4 @@ -package xyz.auriium.branch.centralized.information.description; +package xyz.auriium.branch.nodes.description; import java.util.function.Supplier; diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/information/description/LazyGeneratingDescription.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/description/LazyGeneratingDescription.java similarity index 91% rename from branch-core/src/main/java/xyz/auriium/branch/centralized/information/description/LazyGeneratingDescription.java rename to branch-core/src/main/java/xyz/auriium/branch/nodes/description/LazyGeneratingDescription.java index f3d7790..b97c3bb 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/information/description/LazyGeneratingDescription.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/description/LazyGeneratingDescription.java @@ -1,4 +1,4 @@ -package xyz.auriium.branch.centralized.information.description; +package xyz.auriium.branch.nodes.description; import java.util.function.Supplier; diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/information/description/StringDescription.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/description/StringDescription.java similarity index 84% rename from branch-core/src/main/java/xyz/auriium/branch/centralized/information/description/StringDescription.java rename to branch-core/src/main/java/xyz/auriium/branch/nodes/description/StringDescription.java index 9e9250d..a6a72a2 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/information/description/StringDescription.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/description/StringDescription.java @@ -1,4 +1,4 @@ -package xyz.auriium.branch.centralized.information.description; +package xyz.auriium.branch.nodes.description; /** * Immutable description returning a simple string diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/help/HelpNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/help/HelpNode.java index fd32344..63d1411 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/help/HelpNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/help/HelpNode.java @@ -21,16 +21,16 @@ package xyz.auriium.branch.nodes.help; -import xyz.auriium.branch.centralized.information.description.StringDescription; -import xyz.auriium.branch.execution.NodeContext; -import xyz.auriium.branch.execution.api.Execution; -import xyz.auriium.branch.execution.blocks.EndpointBlock; -import xyz.auriium.branch.fallback.permissions.EmptyPermission; -import xyz.auriium.branch.fallback.permissions.Permission; -import xyz.auriium.branch.centralized.information.description.Description; +import xyz.auriium.branch.nodes.description.StringDescription; +import xyz.auriium.branch.base.NodeContext; +import xyz.auriium.branch.base.execution.Execution; +import xyz.auriium.branch.base.execution.blocks.EndpointBlock; +import xyz.auriium.branch.base.permissions.EmptyPermission; +import xyz.auriium.branch.base.permissions.Permission; +import xyz.auriium.branch.nodes.description.Description; import xyz.auriium.branch.nodes.EndpointNode; -import xyz.auriium.branch.nodes.results.PreProcessSearch; -import xyz.auriium.branch.nodes.results.model.Result; +import xyz.auriium.branch.results.PreProcessSearch; +import xyz.auriium.branch.results.Result; /** * Represents a node that pregenerates help entries based on the message context @@ -63,7 +63,7 @@ public Description getDescription() { } @Override - public Result> searchExecute(NodeContext context, PreProcessSearch input) { + public Result> searchExecute(NodeContext ctx, PreProcessSearch input) { /*List blocks = new ArrayList<>(); String[] strong = ct.getArgs(); diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/single/AbstractSingleNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/single/AbstractSingleNode.java index 3bc92a8..b4cae4a 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/single/AbstractSingleNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/single/AbstractSingleNode.java @@ -1,20 +1,12 @@ package xyz.auriium.branch.nodes.single; -import xyz.auriium.branch.centralized.information.description.Description; -import xyz.auriium.branch.execution.Block; -import xyz.auriium.branch.execution.EnhancedNodeContext; -import xyz.auriium.branch.execution.NodeContext; -import xyz.auriium.branch.execution.api.BasicExecution; -import xyz.auriium.branch.execution.api.Execution; -import xyz.auriium.branch.execution.api.ExecutionHandler; -import xyz.auriium.branch.execution.api.SuggestionHandler; -import xyz.auriium.branch.execution.blocks.EndpointBlock; -import xyz.auriium.branch.fallback.permissions.Permission; -import xyz.auriium.branch.nodes.EndpointNode; +import xyz.auriium.branch.base.execution.blocks.Block; +import xyz.auriium.branch.base.EnhancedNodeContext; +import xyz.auriium.branch.base.execution.BasicExecution; +import xyz.auriium.branch.base.execution.Execution; +import xyz.auriium.branch.base.execution.ExecutionHandler; import xyz.auriium.branch.nodes.SimpleProcessingNode; -import xyz.auriium.branch.nodes.results.InitialSearch; -import xyz.auriium.branch.nodes.results.PreProcessSearch; -import xyz.auriium.branch.nodes.results.model.Result; +import xyz.auriium.branch.results.Result; import java.util.ArrayList; import java.util.List; @@ -23,11 +15,6 @@ public abstract class AbstractSingleNode implements SimpleProcessingNode { public static List returned = new ArrayList<>(); - @Override - public SuggestionHandler getSuggestionHandler() { - return (ignored) -> returned; - } - @Override public Result> onCommand(EnhancedNodeContext context) { return Result.success(new BasicExecution<>(getHandler(), context)); diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/single/SingleNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/single/SingleNode.java index 83660f4..a273e21 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/single/SingleNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/single/SingleNode.java @@ -1,13 +1,11 @@ package xyz.auriium.branch.nodes.single; -import xyz.auriium.branch.execution.Block; -import xyz.auriium.branch.execution.api.ExecutionHandler; -import xyz.auriium.branch.execution.blocks.EndpointBlock; -import xyz.auriium.branch.fallback.permissions.EmptyPermission; -import xyz.auriium.branch.fallback.permissions.Permission; -import xyz.auriium.branch.centralized.information.description.Description; -import xyz.auriium.branch.centralized.information.description.StringDescription; -import xyz.auriium.branch.nodes.EndpointNode; +import xyz.auriium.branch.base.execution.ExecutionHandler; +import xyz.auriium.branch.base.execution.blocks.EndpointBlock; +import xyz.auriium.branch.base.permissions.EmptyPermission; +import xyz.auriium.branch.base.permissions.Permission; +import xyz.auriium.branch.nodes.description.Description; +import xyz.auriium.branch.nodes.description.StringDescription; public class SingleNode extends AbstractSingleNode { diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/single/SingleNodeBuilder.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/single/SingleNodeBuilder.java index 34dc84d..594ae96 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/single/SingleNodeBuilder.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/single/SingleNodeBuilder.java @@ -1,11 +1,10 @@ package xyz.auriium.branch.nodes.single; -import xyz.auriium.branch.execution.Block; -import xyz.auriium.branch.execution.api.ExecutionHandler; -import xyz.auriium.branch.fallback.permissions.EmptyPermission; -import xyz.auriium.branch.fallback.permissions.Permission; -import xyz.auriium.branch.centralized.information.description.Description; -import xyz.auriium.branch.centralized.information.description.StringDescription; +import xyz.auriium.branch.base.execution.ExecutionHandler; +import xyz.auriium.branch.base.permissions.EmptyPermission; +import xyz.auriium.branch.base.permissions.Permission; +import xyz.auriium.branch.nodes.description.Description; +import xyz.auriium.branch.nodes.description.StringDescription; import java.util.Objects; diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/single/implement/DefaultingSingleNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/single/impl/DefaultingSingleNode.java similarity index 59% rename from branch-core/src/main/java/xyz/auriium/branch/nodes/single/implement/DefaultingSingleNode.java rename to branch-core/src/main/java/xyz/auriium/branch/nodes/single/impl/DefaultingSingleNode.java index 2f389a6..442627c 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/single/implement/DefaultingSingleNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/single/impl/DefaultingSingleNode.java @@ -1,8 +1,8 @@ -package xyz.auriium.branch.nodes.single.implement; +package xyz.auriium.branch.nodes.single.impl; -import xyz.auriium.branch.execution.blocks.EndpointBlock; -import xyz.auriium.branch.fallback.permissions.EmptyPermission; -import xyz.auriium.branch.fallback.permissions.Permission; +import xyz.auriium.branch.base.execution.blocks.EndpointBlock; +import xyz.auriium.branch.base.permissions.EmptyPermission; +import xyz.auriium.branch.base.permissions.Permission; public abstract class DefaultingSingleNode extends ImplementableSingleNode { diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/single/implement/ImplementableSingleNode.java b/branch-core/src/main/java/xyz/auriium/branch/nodes/single/impl/ImplementableSingleNode.java similarity index 64% rename from branch-core/src/main/java/xyz/auriium/branch/nodes/single/implement/ImplementableSingleNode.java rename to branch-core/src/main/java/xyz/auriium/branch/nodes/single/impl/ImplementableSingleNode.java index 62bbee4..8ddf48e 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/single/implement/ImplementableSingleNode.java +++ b/branch-core/src/main/java/xyz/auriium/branch/nodes/single/impl/ImplementableSingleNode.java @@ -1,7 +1,7 @@ -package xyz.auriium.branch.nodes.single.implement; +package xyz.auriium.branch.nodes.single.impl; -import xyz.auriium.branch.execution.NodeContext; -import xyz.auriium.branch.execution.api.ExecutionHandler; +import xyz.auriium.branch.base.NodeContext; +import xyz.auriium.branch.base.execution.ExecutionHandler; import xyz.auriium.branch.nodes.single.AbstractSingleNode; public abstract class ImplementableSingleNode extends AbstractSingleNode { diff --git a/branch-core/src/main/java/xyz/auriium/branch/package-info.java b/branch-core/src/main/java/xyz/auriium/branch/package-info.java new file mode 100644 index 0000000..cc280a8 --- /dev/null +++ b/branch-core/src/main/java/xyz/auriium/branch/package-info.java @@ -0,0 +1,4 @@ +/** + * Main package for branch core module + */ +package xyz.auriium.branch; \ No newline at end of file diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/DelegatingImmutableList.java b/branch-core/src/main/java/xyz/auriium/branch/results/DelegatingImmutableList.java similarity index 96% rename from branch-core/src/main/java/xyz/auriium/branch/nodes/results/DelegatingImmutableList.java rename to branch-core/src/main/java/xyz/auriium/branch/results/DelegatingImmutableList.java index 91cb928..72b70d3 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/DelegatingImmutableList.java +++ b/branch-core/src/main/java/xyz/auriium/branch/results/DelegatingImmutableList.java @@ -1,4 +1,4 @@ -package xyz.auriium.branch.nodes.results; +package xyz.auriium.branch.results; import java.util.ArrayList; import java.util.Iterator; diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/FailingResult.java b/branch-core/src/main/java/xyz/auriium/branch/results/FailingResult.java similarity index 96% rename from branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/FailingResult.java rename to branch-core/src/main/java/xyz/auriium/branch/results/FailingResult.java index 9aaeb44..72ed593 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/FailingResult.java +++ b/branch-core/src/main/java/xyz/auriium/branch/results/FailingResult.java @@ -19,7 +19,7 @@ * */ -package xyz.auriium.branch.nodes.results.model; +package xyz.auriium.branch.results; import xyz.auriium.branch.interfacing.exceptional.Anomaly; diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/ImmutableList.java b/branch-core/src/main/java/xyz/auriium/branch/results/ImmutableList.java similarity index 98% rename from branch-core/src/main/java/xyz/auriium/branch/nodes/results/ImmutableList.java rename to branch-core/src/main/java/xyz/auriium/branch/results/ImmutableList.java index ca2ff37..e957eff 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/ImmutableList.java +++ b/branch-core/src/main/java/xyz/auriium/branch/results/ImmutableList.java @@ -1,4 +1,4 @@ -package xyz.auriium.branch.nodes.results; +package xyz.auriium.branch.results; import java.util.Arrays; import java.util.Collection; diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/InitialSearch.java b/branch-core/src/main/java/xyz/auriium/branch/results/InitialSearch.java similarity index 92% rename from branch-core/src/main/java/xyz/auriium/branch/nodes/results/InitialSearch.java rename to branch-core/src/main/java/xyz/auriium/branch/results/InitialSearch.java index 8a5e930..f695f0e 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/InitialSearch.java +++ b/branch-core/src/main/java/xyz/auriium/branch/results/InitialSearch.java @@ -1,7 +1,6 @@ -package xyz.auriium.branch.nodes.results; +package xyz.auriium.branch.results; -import xyz.auriium.branch.execution.Block; -import xyz.auriium.branch.nodes.CommandNode; +import xyz.auriium.branch.base.execution.blocks.Block; import java.util.*; diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/PostProcessSearch.java b/branch-core/src/main/java/xyz/auriium/branch/results/PostProcessSearch.java similarity index 94% rename from branch-core/src/main/java/xyz/auriium/branch/nodes/results/PostProcessSearch.java rename to branch-core/src/main/java/xyz/auriium/branch/results/PostProcessSearch.java index 7bd1c41..45958d6 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/PostProcessSearch.java +++ b/branch-core/src/main/java/xyz/auriium/branch/results/PostProcessSearch.java @@ -1,6 +1,6 @@ -package xyz.auriium.branch.nodes.results; +package xyz.auriium.branch.results; -import xyz.auriium.branch.execution.Block; +import xyz.auriium.branch.base.execution.blocks.Block; import xyz.auriium.branch.nodes.CommandNode; import java.util.List; diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/PreProcessSearch.java b/branch-core/src/main/java/xyz/auriium/branch/results/PreProcessSearch.java similarity index 94% rename from branch-core/src/main/java/xyz/auriium/branch/nodes/results/PreProcessSearch.java rename to branch-core/src/main/java/xyz/auriium/branch/results/PreProcessSearch.java index 3950566..f04e14e 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/PreProcessSearch.java +++ b/branch-core/src/main/java/xyz/auriium/branch/results/PreProcessSearch.java @@ -1,6 +1,6 @@ -package xyz.auriium.branch.nodes.results; +package xyz.auriium.branch.results; -import xyz.auriium.branch.execution.Block; +import xyz.auriium.branch.base.execution.blocks.Block; import xyz.auriium.branch.nodes.CommandNode; import java.util.LinkedList; diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/Result.java b/branch-core/src/main/java/xyz/auriium/branch/results/Result.java similarity index 96% rename from branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/Result.java rename to branch-core/src/main/java/xyz/auriium/branch/results/Result.java index 4c31a24..24b0bd6 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/Result.java +++ b/branch-core/src/main/java/xyz/auriium/branch/results/Result.java @@ -19,7 +19,7 @@ * */ -package xyz.auriium.branch.nodes.results.model; +package xyz.auriium.branch.results; import xyz.auriium.branch.interfacing.exceptional.Anomaly; diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/SearchPair.java b/branch-core/src/main/java/xyz/auriium/branch/results/SearchPair.java similarity index 78% rename from branch-core/src/main/java/xyz/auriium/branch/nodes/results/SearchPair.java rename to branch-core/src/main/java/xyz/auriium/branch/results/SearchPair.java index ce0a22f..c3b9174 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/SearchPair.java +++ b/branch-core/src/main/java/xyz/auriium/branch/results/SearchPair.java @@ -1,6 +1,4 @@ -package xyz.auriium.branch.nodes.results; - -import xyz.auriium.branch.nodes.results.PostProcessSearch; +package xyz.auriium.branch.results; public class SearchPair { diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/SearcherEquality.java b/branch-core/src/main/java/xyz/auriium/branch/results/SearcherEquality.java similarity index 60% rename from branch-core/src/main/java/xyz/auriium/branch/nodes/results/SearcherEquality.java rename to branch-core/src/main/java/xyz/auriium/branch/results/SearcherEquality.java index 291a7d0..7ab9034 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/SearcherEquality.java +++ b/branch-core/src/main/java/xyz/auriium/branch/results/SearcherEquality.java @@ -1,6 +1,6 @@ -package xyz.auriium.branch.nodes.results; +package xyz.auriium.branch.results; -import xyz.auriium.branch.execution.Block; +import xyz.auriium.branch.base.execution.blocks.Block; /** * Represents something that compares blocks diff --git a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/SuccessfulResult.java b/branch-core/src/main/java/xyz/auriium/branch/results/SuccessfulResult.java similarity index 96% rename from branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/SuccessfulResult.java rename to branch-core/src/main/java/xyz/auriium/branch/results/SuccessfulResult.java index 5aca9d6..5cd3d3c 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/nodes/results/model/SuccessfulResult.java +++ b/branch-core/src/main/java/xyz/auriium/branch/results/SuccessfulResult.java @@ -19,7 +19,7 @@ * */ -package xyz.auriium.branch.nodes.results.model; +package xyz.auriium.branch.results; import xyz.auriium.branch.interfacing.exceptional.Anomaly; diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/CommonAdapter.java b/branch-core/src/main/java/xyz/auriium/branch/typeadapter/CommonAdapter.java similarity index 93% rename from branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/CommonAdapter.java rename to branch-core/src/main/java/xyz/auriium/branch/typeadapter/CommonAdapter.java index 6ab3783..4953510 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/CommonAdapter.java +++ b/branch-core/src/main/java/xyz/auriium/branch/typeadapter/CommonAdapter.java @@ -19,7 +19,7 @@ * */ -package xyz.auriium.branch.centralized.typeadapter; +package xyz.auriium.branch.typeadapter; import xyz.auriium.branch.interfacing.exceptional.anomalies.WrongTypeParseAnomaly; @@ -43,4 +43,8 @@ default boolean canAdapt(T input) { default WrongTypeParseAnomaly failedParseResponse(T input) { throw new IllegalStateException("How did you get here (Since canAdapt is always true this should never occur?)"); } + + default String adapterType() { + return ""; + } } diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/ManagerAdapter.java b/branch-core/src/main/java/xyz/auriium/branch/typeadapter/ManagerAdapter.java similarity index 96% rename from branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/ManagerAdapter.java rename to branch-core/src/main/java/xyz/auriium/branch/typeadapter/ManagerAdapter.java index 679384c..3818b7a 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/ManagerAdapter.java +++ b/branch-core/src/main/java/xyz/auriium/branch/typeadapter/ManagerAdapter.java @@ -19,7 +19,7 @@ * */ -package xyz.auriium.branch.centralized.typeadapter; +package xyz.auriium.branch.typeadapter; import xyz.auriium.branch.interfacing.exceptional.anomalies.WrongTypeParseAnomaly; diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/ReduxAdapter.java b/branch-core/src/main/java/xyz/auriium/branch/typeadapter/ReduxAdapter.java similarity index 68% rename from branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/ReduxAdapter.java rename to branch-core/src/main/java/xyz/auriium/branch/typeadapter/ReduxAdapter.java index 41dfe6a..4cb3b09 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/ReduxAdapter.java +++ b/branch-core/src/main/java/xyz/auriium/branch/typeadapter/ReduxAdapter.java @@ -1,6 +1,6 @@ -package xyz.auriium.branch.centralized.typeadapter; +package xyz.auriium.branch.typeadapter; -import xyz.auriium.branch.nodes.results.model.Result; +import xyz.auriium.branch.results.Result; /** * New version of adapter in accordance with new design diff --git a/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/StandardCommonAdapter.java b/branch-core/src/main/java/xyz/auriium/branch/typeadapter/StandardCommonAdapter.java similarity index 94% rename from branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/StandardCommonAdapter.java rename to branch-core/src/main/java/xyz/auriium/branch/typeadapter/StandardCommonAdapter.java index 1f0f594..3b6cfed 100644 --- a/branch-core/src/main/java/xyz/auriium/branch/centralized/typeadapter/StandardCommonAdapter.java +++ b/branch-core/src/main/java/xyz/auriium/branch/typeadapter/StandardCommonAdapter.java @@ -19,7 +19,7 @@ * */ -package xyz.auriium.branch.centralized.typeadapter; +package xyz.auriium.branch.typeadapter; /** * Simple implementation"" diff --git a/branch-core/src/test/java/ExecutionTest.java b/branch-core/src/test/java/ExecutionTest.java index 7dd77f0..0eb0f71 100644 --- a/branch-core/src/test/java/ExecutionTest.java +++ b/branch-core/src/test/java/ExecutionTest.java @@ -19,13 +19,6 @@ * */ -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import xyz.auriium.branch.centralized.NodeSource; -import xyz.auriium.branch.fallback.permissions.EmptyPermission; -import xyz.auriium.branch.centralized.information.description.StringDescription; -import xyz.auriium.branch.nodes.single.SingleNode; - public class ExecutionTest { /*private final static Logger logger = LoggerFactory.getLogger(ExecutionTest.class); diff --git a/branch-core/src/test/java/xyz/auriium/branch/tests/centralized/MockAdapter.java b/branch-core/src/test/java/xyz/auriium/branch/tests/centralized/MockAdapter.java index b0f8f8a..c5a9a18 100644 --- a/branch-core/src/test/java/xyz/auriium/branch/tests/centralized/MockAdapter.java +++ b/branch-core/src/test/java/xyz/auriium/branch/tests/centralized/MockAdapter.java @@ -1,6 +1,6 @@ package xyz.auriium.branch.tests.centralized; -import xyz.auriium.branch.centralized.typeadapter.CommonAdapter; +import xyz.auriium.branch.typeadapter.CommonAdapter; public class MockAdapter implements CommonAdapter { } diff --git a/branch-core/src/test/java/xyz/auriium/branch/tests/centralized/MockContext.java b/branch-core/src/test/java/xyz/auriium/branch/tests/centralized/MockContext.java new file mode 100644 index 0000000..b774f65 --- /dev/null +++ b/branch-core/src/test/java/xyz/auriium/branch/tests/centralized/MockContext.java @@ -0,0 +1,36 @@ +package xyz.auriium.branch.tests.centralized; + +import xyz.auriium.branch.base.NodeContext; + +public class MockContext implements NodeContext { + + private final MockSender sender; + private final String alias; + private final String[] args; + + public MockContext(MockSender sender, String alias, String[] args) { + this.sender = sender; + this.alias = alias; + this.args = args; + } + + @Override + public MockSender getSender() { + return sender; + } + + @Override + public String getAlias() { + return alias; + } + + @Override + public String[] getArgs() { + return args; + } + + @Override + public boolean hasStringPermissible(String string) { + return sender.hasPermission(string); + } +} diff --git a/branch-core/src/test/java/xyz/auriium/branch/tests/centralized/MockContextProducer.java b/branch-core/src/test/java/xyz/auriium/branch/tests/centralized/MockContextProducer.java new file mode 100644 index 0000000..d681487 --- /dev/null +++ b/branch-core/src/test/java/xyz/auriium/branch/tests/centralized/MockContextProducer.java @@ -0,0 +1,11 @@ +package xyz.auriium.branch.tests.centralized; + +import xyz.auriium.branch.base.ContextProvider; +import xyz.auriium.branch.base.NodeContext; + +public class MockContextProducer implements ContextProvider { + @Override + public NodeContext produce(MockSender sender, String alias, String[] strings) { + return new MockContext(sender, alias, strings); + } +} diff --git a/branch-core/src/test/java/xyz/auriium/branch/tests/centralized/MockManager.java b/branch-core/src/test/java/xyz/auriium/branch/tests/centralized/MockManager.java index fe4e666..6a133e2 100644 --- a/branch-core/src/test/java/xyz/auriium/branch/tests/centralized/MockManager.java +++ b/branch-core/src/test/java/xyz/auriium/branch/tests/centralized/MockManager.java @@ -1,11 +1,11 @@ package xyz.auriium.branch.tests.centralized; -import xyz.auriium.branch.centralized.CentralizedManager; -import xyz.auriium.branch.centralized.CentralizedManagerBinder; -import xyz.auriium.branch.centralized.NodeSource; -import xyz.auriium.branch.centralized.base.NodeBase; -import xyz.auriium.branch.centralized.base.NodeBaseBuilder; -import xyz.auriium.branch.centralized.typeadapter.ManagerAdapter; +import xyz.auriium.branch.CentralizedManager; +import xyz.auriium.branch.CentralizedManagerBinder; +import xyz.auriium.branch.NodeSource; +import xyz.auriium.branch.base.NodeBase; +import xyz.auriium.branch.base.NodeBaseBuilder; +import xyz.auriium.branch.typeadapter.ManagerAdapter; import xyz.auriium.branch.nodes.CommandNode; public class MockManager implements CentralizedManager { diff --git a/branch-core/src/test/java/xyz/auriium/branch/tests/centralized/MockSender.java b/branch-core/src/test/java/xyz/auriium/branch/tests/centralized/MockSender.java index 67970cf..c7ebdcf 100644 --- a/branch-core/src/test/java/xyz/auriium/branch/tests/centralized/MockSender.java +++ b/branch-core/src/test/java/xyz/auriium/branch/tests/centralized/MockSender.java @@ -1,12 +1,22 @@ package xyz.auriium.branch.tests.centralized; +import java.util.Arrays; import java.util.UUID; public class MockSender { private final UUID field = UUID.randomUUID(); + private final String[] permissions; + + public MockSender(String... permissions) { + this.permissions = permissions; + } public UUID getField() { return field; } + + public boolean hasPermission(String str) { + return Arrays.asList(permissions).contains(str); + } } diff --git a/branch-core/src/test/java/xyz/auriium/branch/tests/fallback/permission/PermissionTest.java b/branch-core/src/test/java/xyz/auriium/branch/tests/fallback/permission/PermissionTest.java new file mode 100644 index 0000000..c5552f1 --- /dev/null +++ b/branch-core/src/test/java/xyz/auriium/branch/tests/fallback/permission/PermissionTest.java @@ -0,0 +1,45 @@ +package xyz.auriium.branch.tests.fallback.permission; + +import org.junit.jupiter.api.Test; +import xyz.auriium.branch.base.permissions.EmptyPermission; +import xyz.auriium.branch.base.permissions.StringPermission; +import xyz.auriium.branch.tests.centralized.MockContextProducer; +import xyz.auriium.branch.tests.centralized.MockSender; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class PermissionTest { + + private final MockContextProducer producer = new MockContextProducer(); + + @Test + public void whenEmptyPermission_alwaysSuccessful() { + EmptyPermission permission = EmptyPermission.instance(); + + assertTrue( + permission.attempt( + producer.produce(new MockSender(), "alias", new String[]{}) + ) + ); + + } + + @Test + public void whenStringPermission_checkValue() { + var permission = new StringPermission("permissionTest"); + + assertTrue(permission.attempt( + producer.produce(new MockSender("permissionTest"), "test", new String[]{}) + )); + + assertFalse(permission.attempt( + producer.produce(new MockSender("permissionYouDontHave"), "test", new String[]{}) + )); + + + } + + + +} diff --git a/branch-core/src/test/java/xyz/auriium/branch/tests/node/single/SingleNodeManagedIT.java b/branch-core/src/test/java/xyz/auriium/branch/tests/node/single/SingleNodeManagedIT.java new file mode 100644 index 0000000..a9d33e8 --- /dev/null +++ b/branch-core/src/test/java/xyz/auriium/branch/tests/node/single/SingleNodeManagedIT.java @@ -0,0 +1,4 @@ +package xyz.auriium.branch.tests.node.single; + +public class SingleNodeManagedIT { +} diff --git a/branch-core/src/test/java/xyz/auriium/branch/tests/node/single/SingleNodeIT.java b/branch-core/src/test/java/xyz/auriium/branch/tests/node/single/SingleNodeTest.java similarity index 50% rename from branch-core/src/test/java/xyz/auriium/branch/tests/node/single/SingleNodeIT.java rename to branch-core/src/test/java/xyz/auriium/branch/tests/node/single/SingleNodeTest.java index 0d9ef12..710dd8a 100644 --- a/branch-core/src/test/java/xyz/auriium/branch/tests/node/single/SingleNodeIT.java +++ b/branch-core/src/test/java/xyz/auriium/branch/tests/node/single/SingleNodeTest.java @@ -1,5 +1,14 @@ package xyz.auriium.branch.tests.node.single; +import org.junit.jupiter.api.Test; + //Tests direct implementation features of an isolated single node -public class SingleNodeIT { +public class SingleNodeTest { + + @Test + public void nodeTest() { + + + + } } diff --git a/branch-core/src/test/java/xyz/auriium/branch/tests/node/utility/ImmutableListTest.java b/branch-core/src/test/java/xyz/auriium/branch/tests/node/utility/ImmutableListTest.java index 81ef340..e809441 100644 --- a/branch-core/src/test/java/xyz/auriium/branch/tests/node/utility/ImmutableListTest.java +++ b/branch-core/src/test/java/xyz/auriium/branch/tests/node/utility/ImmutableListTest.java @@ -2,8 +2,8 @@ import org.junit.jupiter.api.Test; -import xyz.auriium.branch.nodes.results.DelegatingImmutableList; -import xyz.auriium.branch.nodes.results.ImmutableList; +import xyz.auriium.branch.results.DelegatingImmutableList; +import xyz.auriium.branch.results.ImmutableList; import java.util.ArrayList; import java.util.List; diff --git a/branch-core/src/test/java/xyz/auriium/branch/tests/node/utility/ResultTest.java b/branch-core/src/test/java/xyz/auriium/branch/tests/node/utility/ResultTest.java index 73ca97b..e2835c1 100644 --- a/branch-core/src/test/java/xyz/auriium/branch/tests/node/utility/ResultTest.java +++ b/branch-core/src/test/java/xyz/auriium/branch/tests/node/utility/ResultTest.java @@ -2,7 +2,7 @@ import org.junit.jupiter.api.Test; import xyz.auriium.branch.interfacing.exceptional.AnomalyType; -import xyz.auriium.branch.nodes.results.model.Result; +import xyz.auriium.branch.results.Result; import static org.junit.jupiter.api.Assertions.*; diff --git a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/CommandWrapper.java b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/CommandWrapper.java index 964e53b..ca0de66 100644 --- a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/CommandWrapper.java +++ b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/CommandWrapper.java @@ -21,7 +21,7 @@ package xyz.auriium.branch.spigot; -import xyz.auriium.branch.centralized.base.NodeBase; +import xyz.auriium.branch.base.NodeBase; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; diff --git a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotContextProvider.java b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotContextProvider.java index f41e470..2091ebc 100644 --- a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotContextProvider.java +++ b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotContextProvider.java @@ -22,8 +22,8 @@ package xyz.auriium.branch.spigot; -import xyz.auriium.branch.execution.ContextProvider; -import xyz.auriium.branch.execution.NodeContext; +import xyz.auriium.branch.base.ContextProvider; +import xyz.auriium.branch.base.NodeContext; import xyz.auriium.branch.nodes.CommandNode; import org.bukkit.command.CommandSender; diff --git a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotManager.java b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotManager.java index 2aab2fe..a103b54 100644 --- a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotManager.java +++ b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotManager.java @@ -23,13 +23,13 @@ import org.bukkit.command.CommandSender; import org.bukkit.plugin.java.JavaPlugin; -import xyz.auriium.branch.centralized.CentralizedManager; -import xyz.auriium.branch.centralized.CentralizedManagerBinder; -import xyz.auriium.branch.centralized.NodeSource; -import xyz.auriium.branch.centralized.base.NodeBase; -import xyz.auriium.branch.centralized.base.NodeBaseBuilder; -import xyz.auriium.branch.centralized.typeadapter.ManagerAdapter; -import xyz.auriium.branch.fallback.strategies.OneBackStrategy; +import xyz.auriium.branch.CentralizedManager; +import xyz.auriium.branch.CentralizedManagerBinder; +import xyz.auriium.branch.NodeSource; +import xyz.auriium.branch.base.NodeBase; +import xyz.auriium.branch.base.NodeBaseBuilder; +import xyz.auriium.branch.typeadapter.ManagerAdapter; +import xyz.auriium.branch.base.execution.OneBackStrategy; import xyz.auriium.branch.nodes.CommandNode; import xyz.auriium.branch.spigot.adapter.SenderAdapter; diff --git a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotManagerBinder.java b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotManagerBinder.java index b17d184..3e902d1 100644 --- a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotManagerBinder.java +++ b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/SpigotManagerBinder.java @@ -21,8 +21,8 @@ package xyz.auriium.branch.spigot; -import xyz.auriium.branch.centralized.CentralizedManagerBinder; -import xyz.auriium.branch.centralized.base.NodeBase; +import xyz.auriium.branch.CentralizedManagerBinder; +import xyz.auriium.branch.base.NodeBase; import org.bukkit.command.CommandMap; import org.bukkit.command.CommandSender; diff --git a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/adapter/PlayerAdapter.java b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/adapter/PlayerAdapter.java index c897bd0..c26eda9 100644 --- a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/adapter/PlayerAdapter.java +++ b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/adapter/PlayerAdapter.java @@ -22,7 +22,7 @@ package xyz.auriium.branch.spigot.adapter; import xyz.auriium.branch.interfacing.exceptional.anomalies.WrongTypeParseAnomaly; -import xyz.auriium.branch.centralized.typeadapter.ManagerAdapter; +import xyz.auriium.branch.typeadapter.ManagerAdapter; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; diff --git a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/adapter/SenderAdapter.java b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/adapter/SenderAdapter.java index 7a5daae..221d38b 100644 --- a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/adapter/SenderAdapter.java +++ b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/adapter/SenderAdapter.java @@ -21,7 +21,7 @@ package xyz.auriium.branch.spigot.adapter; -import xyz.auriium.branch.centralized.typeadapter.CommonAdapter; +import xyz.auriium.branch.typeadapter.CommonAdapter; import org.bukkit.command.CommandSender; public class SenderAdapter implements CommonAdapter { diff --git a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/permisison/SpigotPermission.java b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/permisison/SpigotPermission.java index 58ec4f4..5a826c3 100644 --- a/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/permisison/SpigotPermission.java +++ b/branch-spigot-impl/src/main/java/xyz/auriium/branch/spigot/permisison/SpigotPermission.java @@ -1,6 +1,7 @@ package xyz.auriium.branch.spigot.permisison; -import xyz.auriium.branch.fallback.permissions.Permission; +import xyz.auriium.branch.base.NodeContext; +import xyz.auriium.branch.base.permissions.Permission; import org.bukkit.command.CommandSender; public class SpigotPermission implements Permission { @@ -12,8 +13,8 @@ public SpigotPermission(String permission) { } @Override - public boolean attempt(CommandSender sender, String alias, String[] args) { - return sender.hasPermission(permission); + public boolean attempt(NodeContext nodeContext) { + return nodeContext.hasStringPermissible(permission); } @Override