diff --git a/Plan/bukkit/src/main/java/com/djrapitops/plan/system/importing/importers/BukkitImporter.java b/Plan/bukkit/src/main/java/com/djrapitops/plan/system/importing/importers/BukkitImporter.java
index 8c5ff8f60..f387b3a80 100644
--- a/Plan/bukkit/src/main/java/com/djrapitops/plan/system/importing/importers/BukkitImporter.java
+++ b/Plan/bukkit/src/main/java/com/djrapitops/plan/system/importing/importers/BukkitImporter.java
@@ -175,11 +175,11 @@ public abstract class BukkitImporter implements Importer {
}
private BaseUser toBaseUser(UserImportData userImportData) {
- UUID uuid = userImportData.getUuid();
- String name = userImportData.getName();
+ UUID playerUUID = userImportData.getUuid();
+ String playerName = userImportData.getName();
long registered = userImportData.getRegistered();
int timesKicked = userImportData.getTimesKicked();
- return new BaseUser(uuid, name, registered, timesKicked);
+ return new BaseUser(playerUUID, playerName, registered, timesKicked);
}
private UserInfo toUserInfo(UserImportData userImportData) {
diff --git a/Plan/bukkit/src/main/java/com/djrapitops/plan/utilities/java/Reflection.java b/Plan/bukkit/src/main/java/com/djrapitops/plan/utilities/java/Reflection.java
index 1372a529d..b1a143beb 100644
--- a/Plan/bukkit/src/main/java/com/djrapitops/plan/utilities/java/Reflection.java
+++ b/Plan/bukkit/src/main/java/com/djrapitops/plan/utilities/java/Reflection.java
@@ -122,7 +122,7 @@ public final class Reflection {
try {
return (T) field.get(target);
} catch (IllegalAccessException e) {
- throw new RuntimeException("Cannot access reflection.", e);
+ throw new IllegalStateException("Cannot access reflection.", e);
}
}
@@ -131,7 +131,7 @@ public final class Reflection {
try {
field.set(target, value);
} catch (IllegalAccessException e) {
- throw new RuntimeException("Cannot access reflection.", e);
+ throw new IllegalStateException("Cannot access reflection.", e);
}
}
@@ -197,7 +197,7 @@ public final class Reflection {
try {
return method.invoke(target, arguments);
} catch (Exception e) {
- throw new RuntimeException("Cannot invoke method " + method, e);
+ throw new IllegalStateException("Cannot invoke method " + method, e);
}
};
}
@@ -240,7 +240,7 @@ public final class Reflection {
try {
return constructor.newInstance(arguments);
} catch (Exception e) {
- throw new RuntimeException("Cannot invoke constructor " + constructor, e);
+ throw new IllegalStateException("Cannot invoke constructor " + constructor, e);
}
};
}
diff --git a/Plan/bungeecord/src/test/java/com/djrapitops/plan/BungeeSystemTest.java b/Plan/bungeecord/src/test/java/com/djrapitops/plan/BungeeSystemTest.java
index 07cf69a24..52bf7e5b6 100644
--- a/Plan/bungeecord/src/test/java/com/djrapitops/plan/BungeeSystemTest.java
+++ b/Plan/bungeecord/src/test/java/com/djrapitops/plan/BungeeSystemTest.java
@@ -69,6 +69,7 @@ public class BungeeSystemTest {
dbSystem.setActiveDatabase(db);
bungeeSystem.enable();
+ assertTrue(bungeeSystem.isEnabled());
} finally {
bungeeSystem.disable();
}
@@ -90,8 +91,7 @@ public class BungeeSystemTest {
db.setTransactionExecutorServiceProvider(MoreExecutors::newDirectExecutorService);
dbSystem.setActiveDatabase(db);
- bungeeSystem.enable();
- assertTrue(bungeeSystem.isEnabled());
+ bungeeSystem.enable(); // Throws EnableException
} finally {
bungeeSystem.disable();
}
@@ -107,7 +107,7 @@ public class BungeeSystemTest {
config.set(WebserverSettings.PORT, TEST_PORT_NUMBER);
config.set(ProxySettings.IP, "8.8.8.8");
- bungeeSystem.enable();
+ bungeeSystem.enable(); // Throws EnableException
} finally {
bungeeSystem.disable();
}
diff --git a/Plan/common/src/main/java/com/djrapitops/plan/command/commands/manage/ManageDisableCommand.java b/Plan/common/src/main/java/com/djrapitops/plan/command/commands/manage/ManageDisableCommand.java
index 30ab4d9b5..913c32886 100644
--- a/Plan/common/src/main/java/com/djrapitops/plan/command/commands/manage/ManageDisableCommand.java
+++ b/Plan/common/src/main/java/com/djrapitops/plan/command/commands/manage/ManageDisableCommand.java
@@ -60,7 +60,7 @@ public class ManageDisableCommand extends CommandNode {
Verify.isTrue(args.length >= 1,
() -> new IllegalArgumentException(locale.getString(CommandLang.FAIL_REQ_ONE_ARG, Arrays.toString(this.getArguments()))));
- if ("kickcount".equals(args[0].toLowerCase())) {
+ if ("kickcount".equalsIgnoreCase(args[0])) {
status.setCountKicks(false);
sender.sendMessage(locale.getString(CommandLang.FEATURE_DISABLED, "Kick Counting"));
} else {
diff --git a/Plan/common/src/main/java/com/djrapitops/plan/data/element/TableContainer.java b/Plan/common/src/main/java/com/djrapitops/plan/data/element/TableContainer.java
index 8adde4ffc..d4bf8046c 100644
--- a/Plan/common/src/main/java/com/djrapitops/plan/data/element/TableContainer.java
+++ b/Plan/common/src/main/java/com/djrapitops/plan/data/element/TableContainer.java
@@ -92,10 +92,7 @@ public class TableContainer {
if (i > maxIndex) {
body.append("
-");
} else {
- Serializable value = row[i];
- Formatter formatter = formatters[i];
- body.append(" | " : ">");
- body.append(formatter != null ? formatter.apply(value) : (value != null ? value : '-'));
+ appendValue(body, row[i], formatters[i]);
}
body.append(" | ");
} catch (ClassCastException | ArrayIndexOutOfBoundsException e) {
@@ -105,6 +102,15 @@ public class TableContainer {
body.append("");
}
+ private void appendValue(StringBuilder body, Serializable value, Formatter formatter) {
+ body.append("" : ">");
+ if (formatter != null) {
+ body.append(formatter.apply(value));
+ } else {
+ body.append(value != null ? value : '-');
+ }
+ }
+
public final void setColor(String color) {
this.color = color;
}
diff --git a/Plan/common/src/main/java/com/djrapitops/plan/data/store/mutators/health/AbstractHealthInfo.java b/Plan/common/src/main/java/com/djrapitops/plan/data/store/mutators/health/AbstractHealthInfo.java
index e6f38111d..ce42de3ed 100644
--- a/Plan/common/src/main/java/com/djrapitops/plan/data/store/mutators/health/AbstractHealthInfo.java
+++ b/Plan/common/src/main/java/com/djrapitops/plan/data/store/mutators/health/AbstractHealthInfo.java
@@ -29,7 +29,7 @@ import java.util.concurrent.TimeUnit;
public abstract class AbstractHealthInfo {
- protected final String subNote = " ";
+ protected static final String SUB_NOTE = " ";
protected final List notes;
protected final long now;
@@ -109,7 +109,7 @@ public abstract class AbstractHealthInfo {
StringBuilder remainNote = new StringBuilder();
if (activeFWAGNum != 0) {
- remainNote.append(subNote);
+ remainNote.append(SUB_NOTE);
if (percRemain > 0.5) {
remainNote.append(Icons.GREEN_THUMB);
} else if (percRemain > 0.2) {
diff --git a/Plan/common/src/main/java/com/djrapitops/plan/data/store/mutators/health/HealthInformation.java b/Plan/common/src/main/java/com/djrapitops/plan/data/store/mutators/health/HealthInformation.java
index 63b440403..ea79c05a4 100644
--- a/Plan/common/src/main/java/com/djrapitops/plan/data/store/mutators/health/HealthInformation.java
+++ b/Plan/common/src/main/java/com/djrapitops/plan/data/store/mutators/health/HealthInformation.java
@@ -124,7 +124,7 @@ public class HealthInformation extends AbstractHealthInfo {
double aboveThreshold = tpsMutator.percentageTPSAboveThreshold(lowTPSThreshold);
long tpsSpikeMonth = analysisContainer.getValue(AnalysisKeys.TPS_SPIKE_MONTH).orElse(0);
- StringBuilder avgLowThresholdString = new StringBuilder(subNote);
+ StringBuilder avgLowThresholdString = new StringBuilder(SUB_NOTE);
if (aboveThreshold >= 0.96) {
avgLowThresholdString.append(Icons.GREEN_THUMB);
} else if (aboveThreshold >= 0.9) {
diff --git a/Plan/common/src/main/java/com/djrapitops/plan/data/store/mutators/health/NetworkHealthInformation.java b/Plan/common/src/main/java/com/djrapitops/plan/data/store/mutators/health/NetworkHealthInformation.java
index 8e4f0f6e5..db50e1b8c 100644
--- a/Plan/common/src/main/java/com/djrapitops/plan/data/store/mutators/health/NetworkHealthInformation.java
+++ b/Plan/common/src/main/java/com/djrapitops/plan/data/store/mutators/health/NetworkHealthInformation.java
@@ -112,7 +112,7 @@ public class NetworkHealthInformation extends AbstractHealthInfo {
.map(c -> {
int playersPerMonth = c.getUnsafe(AnalysisKeys.AVG_PLAYERS_MONTH);
Server server = c.getUnsafe(serverKey);
- return subNote + (playersPerMonth >= average && playersPerMonth > 0 ? Icons.GREEN_PLUS : Icons.RED_MINUS) + " " +
+ return SUB_NOTE + (playersPerMonth >= average && playersPerMonth > 0 ? Icons.GREEN_PLUS : Icons.RED_MINUS) + " " +
server.getName() + ": " + playersPerMonth;
}).forEach(subNotes::append);
addNote(icon + " " + decimalFormatter.apply(average) + uniquePlayersNote + subNotes.toString());
@@ -139,7 +139,7 @@ public class NetworkHealthInformation extends AbstractHealthInfo {
.map(c -> {
int playersPerMonth = c.getUnsafe(AnalysisKeys.AVG_PLAYERS_NEW_MONTH);
Server server = c.getUnsafe(serverKey);
- return subNote + (playersPerMonth >= average && playersPerMonth > 0 ? Icons.GREEN_PLUS : Icons.RED_MINUS) + " " +
+ return SUB_NOTE + (playersPerMonth >= average && playersPerMonth > 0 ? Icons.GREEN_PLUS : Icons.RED_MINUS) + " " +
server.getName() + ": " + playersPerMonth;
}).forEach(subNotes::append);
addNote(icon + " " + decimalFormatter.apply(average) + newPlayersNote + subNotes.toString());
@@ -179,7 +179,7 @@ public class NetworkHealthInformation extends AbstractHealthInfo {
.map(c -> {
int playersPerMonth = c.getUnsafe(AnalysisKeys.PLAYERS_MONTH);
Server server = c.getUnsafe(serverKey);
- return subNote + (playersPerMonth > 0 ? Icons.GREEN_PLUS : Icons.RED_MINUS) + " " +
+ return SUB_NOTE + (playersPerMonth > 0 ? Icons.GREEN_PLUS : Icons.RED_MINUS) + " " +
server.getName() + ": " + playersPerMonth;
}).forEach(subNotes::append);
addNote(icon.toHtml() + " " + uniquePlayersNote + subNotes.toString());
diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/DataStoreQueries.java b/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/DataStoreQueries.java
index dcea77d6c..dfbf6c388 100644
--- a/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/DataStoreQueries.java
+++ b/Plan/common/src/main/java/com/djrapitops/plan/db/access/queries/DataStoreQueries.java
@@ -27,6 +27,7 @@ import com.djrapitops.plan.db.access.ExecBatchStatement;
import com.djrapitops.plan.db.access.ExecStatement;
import com.djrapitops.plan.db.access.Executable;
import com.djrapitops.plan.db.sql.tables.*;
+import com.djrapitops.plugin.utilities.Verify;
import java.sql.PreparedStatement;
import java.sql.SQLException;
@@ -88,7 +89,7 @@ public class DataStoreQueries {
* @throws IllegalArgumentException If {@link Session#endSession(long)} has not yet been called.
*/
public static Executable storeSession(Session session) {
- session.getValue(SessionKeys.END).orElseThrow(() -> new IllegalArgumentException("Attempted to save a session that has not ended."));
+ Verify.isTrue(session.supports(SessionKeys.END), () -> new IllegalArgumentException("Attempted to save a session that has not ended."));
return connection -> {
storeSessionInformation(session).execute(connection);
storeSessionKills(session).execute(connection);
diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/access/transactions/Transaction.java b/Plan/common/src/main/java/com/djrapitops/plan/db/access/transactions/Transaction.java
index 07b5b5055..788890e72 100644
--- a/Plan/common/src/main/java/com/djrapitops/plan/db/access/transactions/Transaction.java
+++ b/Plan/common/src/main/java/com/djrapitops/plan/db/access/transactions/Transaction.java
@@ -157,4 +157,8 @@ public abstract class Transaction {
public String toString() {
return getClass().getSimpleName() + (success ? " (finished)" : "");
}
+
+ public boolean wasSuccessful() {
+ return success;
+ }
}
\ No newline at end of file
diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/CallerImplementation.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/CallerImplementation.java
index e3f526c99..fa05d4516 100644
--- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/CallerImplementation.java
+++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/CallerImplementation.java
@@ -47,7 +47,7 @@ public class CallerImplementation implements Caller {
}
@Override
- public void updatePlayerData(UUID playerUUID, String playerName) throws IllegalArgumentException {
+ public void updatePlayerData(UUID playerUUID, String playerName) {
Verify.nullCheck(playerUUID, () -> new IllegalArgumentException("'playerUUID' can not be null!"));
Verify.nullCheck(playerName, () -> new IllegalArgumentException("'playerName' can not be null!"));
processing.submitNonCritical(() -> extensionServiceImplementation.updatePlayerValues(gatherer, playerUUID, playerName, CallEvents.MANUAL));
diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/ProviderInformation.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/ProviderInformation.java
index 4ca642e15..0e446f422 100644
--- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/ProviderInformation.java
+++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/ProviderInformation.java
@@ -21,6 +21,7 @@ import com.djrapitops.plan.extension.icon.Icon;
import com.djrapitops.plan.extension.implementation.results.ExtensionDescriptive;
import org.apache.commons.lang3.StringUtils;
+import java.util.Objects;
import java.util.Optional;
/**
@@ -48,10 +49,38 @@ public class ProviderInformation extends ExtensionDescriptive {
}
public Optional getTab() {
- return tab == null || tab.isEmpty() ? Optional.empty() : Optional.of(StringUtils.truncate(tab, 50));
+ return tab == null || tab.isEmpty()
+ ? Optional.empty()
+ : Optional.of(StringUtils.truncate(tab, 50));
}
public Optional getCondition() {
- return condition == null || condition.value().isEmpty() ? Optional.empty() : Optional.of((condition.negated() ? "not_" : "") + StringUtils.truncate(condition.value(), 50));
+ if (condition == null || condition.value().isEmpty()) {
+ return Optional.empty();
+ } else if (condition.negated()) {
+ return Optional.of("not_" + getTruncatedConditionName());
+ } else {
+ return Optional.of(getTruncatedConditionName());
+ }
+ }
+
+ private String getTruncatedConditionName() {
+ return StringUtils.truncate(condition.value(), 50);
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof ProviderInformation)) return false;
+ if (!super.equals(o)) return false;
+ ProviderInformation that = (ProviderInformation) o;
+ return pluginName.equals(that.pluginName) &&
+ Objects.equals(tab, that.tab) &&
+ Objects.equals(condition, that.condition);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(super.hashCode(), pluginName, tab, condition);
}
}
\ No newline at end of file
diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/locale/lang/ErrorPageLang.java b/Plan/common/src/main/java/com/djrapitops/plan/system/locale/lang/ErrorPageLang.java
index a5451a6cc..eb2270d64 100644
--- a/Plan/common/src/main/java/com/djrapitops/plan/system/locale/lang/ErrorPageLang.java
+++ b/Plan/common/src/main/java/com/djrapitops/plan/system/locale/lang/ErrorPageLang.java
@@ -27,7 +27,7 @@ public enum ErrorPageLang implements Lang {
NOT_PLAYED_404("Player has not played on this server."),
UNKNOWN_PAGE_404("Make sure you're accessing a link given by a command, Examples:/player/PlayerName /server/ServerName "),
UNAUTHORIZED_401("Unauthorized"),
- AUTHENTICATION_FAIlED_401("Authentication Failed."),
+ AUTHENTICATION_FAILED_401("Authentication Failed."),
AUTH_FAIL_TIPS_401("- Ensure you have registered a user with /plan register - Check that the username and password are correct - Username and password are case-sensitive
If you have forgotten your password, ask a staff member to delete your old user and re-register."),
FORBIDDEN_403("Forbidden"),
ACCESS_DENIED_403("Access Denied"),
diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/settings/changes/ConfigChange.java b/Plan/common/src/main/java/com/djrapitops/plan/system/settings/changes/ConfigChange.java
index 3923d8fe0..32048a335 100644
--- a/Plan/common/src/main/java/com/djrapitops/plan/system/settings/changes/ConfigChange.java
+++ b/Plan/common/src/main/java/com/djrapitops/plan/system/settings/changes/ConfigChange.java
@@ -41,7 +41,7 @@ public interface ConfigChange {
}
@Override
- public void apply(Config config) {
+ public synchronized void apply(Config config) {
if (!config.moveChild(oldPath, newPath)) {
throw new IllegalStateException("Failed to move config node from '" + oldPath + "' to '" + newPath + "'");
}
@@ -63,7 +63,7 @@ public interface ConfigChange {
}
@Override
- public void apply(Config config) {
+ public synchronized void apply(Config config) {
config.getNode(oldPath).ifPresent(oldNode -> config.addNode(newPath).copyAll(oldNode));
}
diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/settings/config/ConfigValueParser.java b/Plan/common/src/main/java/com/djrapitops/plan/system/settings/config/ConfigValueParser.java
index 2b84e08b6..ead1610bb 100644
--- a/Plan/common/src/main/java/com/djrapitops/plan/system/settings/config/ConfigValueParser.java
+++ b/Plan/common/src/main/java/com/djrapitops/plan/system/settings/config/ConfigValueParser.java
@@ -76,6 +76,10 @@ public interface ConfigValueParser {
*/
String decompose(T ofValue);
+ static IllegalArgumentException nullInvalidException() {
+ return new IllegalArgumentException("Null value is not valid for saving");
+ }
+
class StringParser implements ConfigValueParser {
@Override
public String compose(String fromValue) {
@@ -89,7 +93,7 @@ public interface ConfigValueParser {
@Override
public String decompose(String value) {
- Verify.nullCheck(value, () -> new IllegalArgumentException("Null value is not valid for saving"));
+ Verify.nullCheck(value, ConfigValueParser::nullInvalidException);
boolean surroundedByQuotes = value.startsWith("'") || value.endsWith("'");
boolean surroundedByDoubleQuotes = value.startsWith("\"") || value.endsWith("\"");
@@ -116,7 +120,7 @@ public interface ConfigValueParser {
@Override
public String decompose(Integer ofValue) {
- Verify.nullCheck(ofValue, () -> new IllegalArgumentException("Null value is not valid for saving"));
+ Verify.nullCheck(ofValue, ConfigValueParser::nullInvalidException);
return Integer.toString(ofValue);
}
}
@@ -133,7 +137,7 @@ public interface ConfigValueParser {
@Override
public String decompose(Long ofValue) {
- Verify.nullCheck(ofValue, () -> new IllegalArgumentException("Null value is not valid for saving"));
+ Verify.nullCheck(ofValue, ConfigValueParser::nullInvalidException);
return Long.toString(ofValue);
}
}
@@ -146,7 +150,7 @@ public interface ConfigValueParser {
@Override
public String decompose(Boolean ofValue) {
- Verify.nullCheck(ofValue, () -> new IllegalArgumentException("Null value is not valid for saving"));
+ Verify.nullCheck(ofValue, ConfigValueParser::nullInvalidException);
return Boolean.toString(ofValue);
}
}
@@ -174,7 +178,7 @@ public interface ConfigValueParser {
@Override
public String decompose(List ofValue) {
- Verify.nullCheck(ofValue, () -> new IllegalArgumentException("Null value is not valid for saving"));
+ Verify.nullCheck(ofValue, ConfigValueParser::nullInvalidException);
StringBuilder decomposedString = new StringBuilder();
for (String value : ofValue) {
diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/settings/config/PlanConfig.java b/Plan/common/src/main/java/com/djrapitops/plan/system/settings/config/PlanConfig.java
index 606b8a368..7e8879f2a 100644
--- a/Plan/common/src/main/java/com/djrapitops/plan/system/settings/config/PlanConfig.java
+++ b/Plan/common/src/main/java/com/djrapitops/plan/system/settings/config/PlanConfig.java
@@ -27,6 +27,7 @@ import javax.inject.Named;
import javax.inject.Singleton;
import java.io.File;
import java.util.List;
+import java.util.Objects;
import java.util.TimeZone;
import java.util.concurrent.TimeUnit;
@@ -134,4 +135,9 @@ public class PlanConfig extends Config {
if (o == null) return false;
return super.equals(o);
}
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(super.hashCode());
+ }
}
\ No newline at end of file
diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/webserver/response/pages/RawDataResponse.java b/Plan/common/src/main/java/com/djrapitops/plan/system/webserver/response/pages/RawDataResponse.java
index a64425136..a1dd8a097 100644
--- a/Plan/common/src/main/java/com/djrapitops/plan/system/webserver/response/pages/RawDataResponse.java
+++ b/Plan/common/src/main/java/com/djrapitops/plan/system/webserver/response/pages/RawDataResponse.java
@@ -59,7 +59,7 @@ public class RawDataResponse extends JSONResponse |