Skip to content

Commit

Permalink
Removed duplications, added test classes
Browse files Browse the repository at this point in the history
  • Loading branch information
tastybento committed Oct 23, 2020
1 parent 12c8d31 commit 8feb9a8
Show file tree
Hide file tree
Showing 16 changed files with 928 additions and 62 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@
*/
package world.bentobox.bank.commands;

import java.util.Collections;
import java.util.EnumMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.math.NumberUtils;

Expand All @@ -29,31 +32,70 @@ protected AbstractBankCommand(CompositeCommand parent, String string) {
protected double value;
protected User target;

public boolean canAbstractExecute(User user, String label, List<String> args, int reqArgNum) {
protected enum RequestType {
USER_BALANCE,
USER_DEPOSIT,
USER_WITHDRAWAL,
ADMIN_SET,
ADMIN_BALANCE,
ADMIN_GIVE,
ADMIN_TAKE,
USER_STATEMENT,
ADMIN_STATEMENT
}

/**
* A map of the number of args required for each request type
*/
private static final Map<RequestType, Integer> ARG_SIZE;
static {
Map<RequestType, Integer> as = new EnumMap<>(RequestType.class);
as.put(RequestType.USER_BALANCE, 0);
as.put(RequestType.USER_DEPOSIT, 1);
as.put(RequestType.USER_WITHDRAWAL, 1);
as.put(RequestType.USER_STATEMENT, 0);
as.put(RequestType.ADMIN_BALANCE, 1);
as.put(RequestType.ADMIN_GIVE, 2);
as.put(RequestType.ADMIN_SET, 2);
as.put(RequestType.ADMIN_STATEMENT, 1);
as.put(RequestType.ADMIN_TAKE, 2);

ARG_SIZE = Collections.unmodifiableMap(as);
}

/**
* @param user - user
* @param args - args
* @param reqArgNum - required number of args
* @return true if can execute, false if not
*/
public boolean canAbstractExecute(User user, List<String> args, RequestType type) {
// Check world
if (!this.getWorld().equals(user.getWorld())) {
user.sendMessage("general.errors.wrong-world");
return false;
}
if (!checkArgs(user, args, reqArgNum)) {
if (!checkArgs(user, args, type)) {
return false;
}
// Check flag
if (!island.isAllowed(user, Bank.BANK_ACCESS)) {
if (type.name().startsWith("USER") && !island.isAllowed(user, Bank.BANK_ACCESS)) {
user.sendMessage("bank.errors.no-rank");
return false;
}
return true;
}

protected boolean checkArgs(User user, List<String> args, int size) {
protected boolean checkArgs(User user, List<String> args, RequestType type) {
// Check if there's the right number of arguments
int size = ARG_SIZE.get(type);
if (args.size() != size) {
this.showHelp(this, user);
return false;
}
// Get target's island
if (size < 2) {
boolean isUser = type.name().startsWith("USER");
if (isUser) {
island = getIslands().getIsland(getWorld(), user);
} else {
target = getAddon().getPlayers().getUser(args.get(0));
Expand All @@ -63,13 +105,14 @@ protected boolean checkArgs(User user, List<String> args, int size) {
user.sendMessage("general.errors.no-island");
return false;
}
if (size == 0) return true;
if (args.size() == 0 || (!isUser && args.size() == 1)) return true;
// Check value
if (!NumberUtils.isNumber(args.get(size - 1))) {
String value = args.get(args.size() - 1);
if (!NumberUtils.isNumber(value)) {
user.sendMessage("bank.errors.must-be-a-number");
return false;
}
return parseValue(user, args.get(size - 1));
return parseValue(user, value);
}

protected boolean parseValue(User user, String arg) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package world.bentobox.bank.commands.admin;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

import world.bentobox.bank.commands.AbstractBankCommand;
import world.bentobox.bentobox.api.commands.CompositeCommand;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.bentobox.util.Util;

public abstract class AbstractAdminBankCommand extends AbstractBankCommand {

protected AbstractAdminBankCommand(CompositeCommand parent, String string) {
super(parent, string);
}

@Override
public Optional<List<String>> tabComplete(User user, String alias, List<String> args) {
String lastArg = !args.isEmpty() ? args.get(args.size()-1) : "";
if (args.isEmpty()) {
// Don't show every player on the server. Require at least the first letter
return Optional.empty();
}
List<String> options = new ArrayList<>(Util.getOnlinePlayerList(user));
return Optional.of(Util.tabLimit(options, lastArg));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
* @author tastybento
*
*/
public class AdminBalanceCommand extends AdminCommand {
public class AdminBalanceCommand extends AbstractAdminBankCommand {

public AdminBalanceCommand(CompositeCommand parent) {
super(parent, "balance");
Expand All @@ -26,18 +26,7 @@ public void setup() {

@Override
public boolean canExecute(User user, String label, List<String> args) {
// Check if there's the right number of arguments
if (args.size() != 1) {
this.showHelp(this, user);
return false;
}
// Get target's island
island = getIslands().getIsland(getWorld(), getAddon().getPlayers().getUser(args.get(0)));
if (island == null) {
user.sendMessage("general.errors.no-island");
return false;
}
return true;
return this.canAbstractExecute(user, args, RequestType.ADMIN_BALANCE);
}

@Override
Expand Down
18 changes: 2 additions & 16 deletions src/main/java/world/bentobox/bank/commands/admin/AdminCommand.java
Original file line number Diff line number Diff line change
@@ -1,20 +1,16 @@
package world.bentobox.bank.commands.admin;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

import world.bentobox.bank.Bank;
import world.bentobox.bank.commands.AbstractBankCommand;
import world.bentobox.bentobox.api.commands.CompositeCommand;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.bentobox.util.Util;

/**
* @author tastybento
*
*/
public class AdminCommand extends AbstractBankCommand {
public class AdminCommand extends CompositeCommand {

public AdminCommand(Bank bank, CompositeCommand adminCmd, String adminCommand) {
super(bank, adminCmd, adminCommand);
Expand All @@ -26,6 +22,7 @@ public AdminCommand(CompositeCommand parent, String string) {

@Override
public void setup() {
this.setPermission("bank.admin");
this.setDescription("bank.admin.description");
new AdminStatementCommand(this);
new AdminBalanceCommand(this);
Expand All @@ -39,15 +36,4 @@ public boolean execute(User user, String label, List<String> args) {
return true;
}

@Override
public Optional<List<String>> tabComplete(User user, String alias, List<String> args) {
String lastArg = !args.isEmpty() ? args.get(args.size()-1) : "";
if (args.isEmpty()) {
// Don't show every player on the server. Require at least the first letter
return Optional.empty();
}
List<String> options = new ArrayList<>(Util.getOnlinePlayerList(user));
return Optional.of(Util.tabLimit(options, lastArg));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* @author tastybento
*
*/
public class AdminGiveCommand extends AdminCommand {
public class AdminGiveCommand extends AbstractAdminBankCommand {

public AdminGiveCommand(CompositeCommand parent) {
super(parent, "give");
Expand All @@ -29,13 +29,16 @@ public void setup() {

@Override
public boolean canExecute(User user, String label, List<String> args) {
return checkArgs(user, args, 2);
return checkArgs(user, args, RequestType.ADMIN_GIVE);
}

@Override
public boolean execute(User user, String label, List<String> args) {
// Success
((Bank)getAddon()).getBankManager().deposit(user, island, value, TxType.GIVE).thenAccept(result -> {
((Bank)getAddon())
.getBankManager()
.deposit(user, island, value, TxType.GIVE)
.thenAccept(result -> {
if (result == BankResponse.SUCCESS) {
VaultHook vault = ((Bank)this.getAddon()).getVault();
user.sendMessage("bank.deposit.success", TextVariables.NUMBER, vault.format(((Bank)getAddon()).getBankManager().getBalance(user, getWorld())));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* @author tastybento
*
*/
public class AdminSetCommand extends AdminCommand {
public class AdminSetCommand extends AbstractAdminBankCommand {

public AdminSetCommand(CompositeCommand parent) {
super(parent, "set");
Expand All @@ -29,7 +29,7 @@ public void setup() {

@Override
public boolean canExecute(User user, String label, List<String> args) {
return checkArgs(user, args, 2);
return checkArgs(user, args, RequestType.ADMIN_SET);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
* @author tastybento
*
*/
public class AdminStatementCommand extends AdminCommand {
public class AdminStatementCommand extends AbstractAdminBankCommand {

public AdminStatementCommand(CompositeCommand parent) {
super(parent, "statement");
Expand All @@ -28,18 +28,7 @@ public void setup() {

@Override
public boolean canExecute(User user, String label, List<String> args) {
// Check if there's the right number of arguments
if (args.size() != 1) {
this.showHelp(this, user);
return false;
}
// Get target's island
island = getIslands().getIsland(getWorld(), getAddon().getPlayers().getUser(args.get(0)));
if (island == null) {
user.sendMessage("general.errors.no-island");
return false;
}
return true;
return canAbstractExecute(user, args, RequestType.ADMIN_STATEMENT);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
* @author tastybento
*
*/
public class AdminTakeCommand extends AdminCommand {
public class AdminTakeCommand extends AbstractAdminBankCommand {

public AdminTakeCommand(CompositeCommand parent) {
super(parent, "take");
Expand All @@ -28,13 +28,16 @@ public void setup() {

@Override
public boolean canExecute(User user, String label, List<String> args) {
return checkArgs(user, args, 2);
return checkArgs(user, args, RequestType.ADMIN_TAKE);
}

@Override
public boolean execute(User user, String label, List<String> args) {
// Success
((Bank)getAddon()).getBankManager().withdraw(user, island, value, TxType.TAKE).thenAccept(result -> {
((Bank)getAddon())
.getBankManager()
.withdraw(user, island, value, TxType.TAKE)
.thenAccept(result -> {
switch (result) {
case FAILURE_LOW_BALANCE:
user.sendMessage("bank.errors.low-balance");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public void setup() {

@Override
public boolean canExecute(User user, String label, List<String> args) {
return canAbstractExecute(user, label, args, 0);
return canAbstractExecute(user, args, RequestType.USER_BALANCE);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public void setup() {

@Override
public boolean canExecute(User user, String label, List<String> args) {
return canAbstractExecute(user, label, args, 1);
return canAbstractExecute(user, args, RequestType.USER_DEPOSIT);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public void setup() {

@Override
public boolean canExecute(User user, String label, List<String> args) {
return canAbstractExecute(user, label, args, 0);
return canAbstractExecute(user, args, RequestType.USER_STATEMENT);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public void setup() {

@Override
public boolean canExecute(User user, String label, List<String> args) {
if (!canAbstractExecute(user, label, args, 1)) {
if (!canAbstractExecute(user, args, RequestType.USER_WITHDRAWAL)) {
return false;
}
// Check if the player has the balance
Expand Down

0 comments on commit 8feb9a8

Please sign in to comment.