mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2025-01-06 16:37:58 +01:00
Fixed a few sonar smells
This commit is contained in:
parent
a544b75838
commit
fee603a657
@ -20,7 +20,6 @@ import com.djrapitops.plan.commands.PlanCommand;
|
||||
import com.djrapitops.plan.gathering.ServerShutdownSave;
|
||||
import com.djrapitops.plan.modules.APFModule;
|
||||
import com.djrapitops.plan.modules.FilesModule;
|
||||
import com.djrapitops.plan.modules.ServerSuperClassBindingModule;
|
||||
import com.djrapitops.plan.modules.SystemObjectProvidingModule;
|
||||
import com.djrapitops.plan.modules.bukkit.BukkitPlanModule;
|
||||
import com.djrapitops.plan.modules.bukkit.BukkitServerPropertiesModule;
|
||||
@ -42,7 +41,6 @@ import javax.inject.Singleton;
|
||||
APFModule.class,
|
||||
FilesModule.class,
|
||||
BukkitServerPropertiesModule.class,
|
||||
ServerSuperClassBindingModule.class,
|
||||
BukkitSuperClassBindingModule.class
|
||||
})
|
||||
public interface PlanBukkitComponent {
|
||||
|
@ -29,7 +29,6 @@ import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.io.TempDir;
|
||||
import org.junit.platform.runner.JUnitPlatform;
|
||||
import org.junit.runner.RunWith;
|
||||
import utilities.OptionalAssert;
|
||||
import utilities.RandomData;
|
||||
import utilities.mocks.BukkitMockComponent;
|
||||
|
||||
@ -37,6 +36,7 @@ import java.nio.file.Path;
|
||||
import java.util.Collection;
|
||||
import java.util.Optional;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
|
||||
@ -77,7 +77,7 @@ public class BukkitSystemTest {
|
||||
Optional<String> found = database.query(ServerQueries.fetchServerMatchingIdentifier(system.getServerInfo().getServerUUID()))
|
||||
.map(Server::getWebAddress);
|
||||
|
||||
OptionalAssert.equals(expectedAddress, found);
|
||||
assertEquals(expectedAddress, found.orElse(null));
|
||||
} finally {
|
||||
system.disable();
|
||||
}
|
||||
|
@ -41,6 +41,7 @@ import java.util.UUID;
|
||||
* PlanAPI extension for all implementations.
|
||||
*
|
||||
* @author Rsl1122
|
||||
* @deprecated Plan API v4 has been deprecated, use the APIv5 instead (https://github.com/plan-player-analytics/Plan/wiki/APIv5).
|
||||
*/
|
||||
@Singleton
|
||||
@Deprecated
|
||||
|
@ -29,6 +29,7 @@ import java.util.UUID;
|
||||
* Interface for PlanAPI methods.
|
||||
*
|
||||
* @author Rsl1122
|
||||
* @deprecated Plan API v4 has been deprecated, use the APIv5 instead (https://github.com/plan-player-analytics/Plan/wiki/APIv5).
|
||||
*/
|
||||
@Deprecated
|
||||
public interface PlanAPI {
|
||||
|
@ -28,6 +28,7 @@ import java.util.Optional;
|
||||
* <p>
|
||||
* The Keys might change in the future, but the Optional API should help dealing with those cases.
|
||||
*
|
||||
* @deprecated Plan API v4 has been deprecated, use the APIv5 instead (https://github.com/plan-player-analytics/Plan/wiki/APIv5).
|
||||
* @author Rsl1122
|
||||
*/
|
||||
@Deprecated
|
||||
|
@ -29,6 +29,7 @@ import java.util.Optional;
|
||||
* The Keys might change in the future, but the Optional API should help dealing with those cases.
|
||||
*
|
||||
* @author Rsl1122
|
||||
* @deprecated Plan API v4 has been deprecated, use the APIv5 instead (https://github.com/plan-player-analytics/Plan/wiki/APIv5).
|
||||
*/
|
||||
@Deprecated
|
||||
public class ServerContainer {
|
||||
|
@ -27,7 +27,6 @@ import com.djrapitops.plugin.command.CommandType;
|
||||
import com.djrapitops.plugin.command.Sender;
|
||||
import com.djrapitops.plugin.logging.L;
|
||||
import com.djrapitops.plugin.logging.error.ErrorHandler;
|
||||
import com.djrapitops.plugin.task.RunnableFactory;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
@ -41,15 +40,13 @@ public class ReloadCommand extends CommandNode {
|
||||
private final PlanPlugin plugin;
|
||||
private final Locale locale;
|
||||
private final ErrorHandler errorHandler;
|
||||
private final RunnableFactory runnableFactory;
|
||||
|
||||
@Inject
|
||||
public ReloadCommand(PlanPlugin plugin, Locale locale, RunnableFactory runnableFactory, ErrorHandler errorHandler) {
|
||||
public ReloadCommand(PlanPlugin plugin, Locale locale, ErrorHandler errorHandler) {
|
||||
super("reload", Permissions.RELOAD.getPermission(), CommandType.CONSOLE);
|
||||
|
||||
this.plugin = plugin;
|
||||
this.locale = locale;
|
||||
this.runnableFactory = runnableFactory;
|
||||
this.errorHandler = errorHandler;
|
||||
|
||||
setShortHelp(locale.getString(CmdHelpLang.RELOAD));
|
||||
|
@ -133,43 +133,46 @@ public class ManageExportCommand extends CommandNode {
|
||||
}
|
||||
|
||||
private void exportPlayers(Sender sender) {
|
||||
Boolean exportPlayerJSON = config.get(ExportSettings.PLAYER_JSON);
|
||||
Boolean exportPlayerHTML = config.get(ExportSettings.PLAYER_PAGES);
|
||||
boolean exportPlayerJSON = config.get(ExportSettings.PLAYER_JSON);
|
||||
boolean exportPlayerHTML = config.get(ExportSettings.PLAYER_PAGES);
|
||||
boolean exportPlayersHtml = config.get(ExportSettings.PLAYERS_PAGE);
|
||||
if (!exportPlayerJSON && !exportPlayerHTML) {
|
||||
sender.sendMessage(locale.getString(ManageLang.PROGRESS_FAIL));
|
||||
sender.sendMessage("§c'" + ExportSettings.PLAYER_JSON.getPath() + "' & '" + ExportSettings.PLAYER_PAGES.getPath() + "': false");
|
||||
return;
|
||||
}
|
||||
|
||||
processing.submitNonCritical(() -> {
|
||||
sender.sendMessage(locale.getString(ManageLang.PROGRESS_START));
|
||||
if (config.get(ExportSettings.PLAYERS_PAGE)) {
|
||||
processing.submitNonCritical(exporter::exportPlayersPage);
|
||||
}
|
||||
if (exportPlayersHtml) {
|
||||
processing.submitNonCritical(exporter::exportPlayersPage);
|
||||
}
|
||||
processing.submitNonCritical(() -> performExport(sender, exportPlayerJSON, exportPlayerHTML));
|
||||
}
|
||||
|
||||
Map<UUID, String> players = dbSystem.getDatabase().query(UserIdentifierQueries.fetchAllPlayerNames());
|
||||
int size = players.size();
|
||||
int failed = 0;
|
||||
private void performExport(Sender sender, boolean exportPlayerJSON, boolean exportPlayerHTML) {
|
||||
sender.sendMessage(locale.getString(ManageLang.PROGRESS_START));
|
||||
|
||||
int i = 1;
|
||||
for (Map.Entry<UUID, String> entry : players.entrySet()) {
|
||||
try {
|
||||
if (exportPlayerJSON) exporter.exportPlayerJSON(entry.getKey(), entry.getValue());
|
||||
if (exportPlayerHTML) exporter.exportPlayerPage(entry.getKey(), entry.getValue());
|
||||
} catch (ExportException e) {
|
||||
failed++;
|
||||
}
|
||||
i++;
|
||||
if (i % 1000 == 0) {
|
||||
sender.sendMessage(i + " / " + size + " processed..");
|
||||
}
|
||||
Map<UUID, String> players = dbSystem.getDatabase().query(UserIdentifierQueries.fetchAllPlayerNames());
|
||||
int size = players.size();
|
||||
int failed = 0;
|
||||
|
||||
int i = 1;
|
||||
for (Map.Entry<UUID, String> entry : players.entrySet()) {
|
||||
try {
|
||||
if (exportPlayerJSON) exporter.exportPlayerJSON(entry.getKey(), entry.getValue());
|
||||
if (exportPlayerHTML) exporter.exportPlayerPage(entry.getKey(), entry.getValue());
|
||||
} catch (ExportException e) {
|
||||
failed++;
|
||||
}
|
||||
sender.sendMessage(locale.getString(ManageLang.PROGRESS_SUCCESS));
|
||||
if (failed != 0) {
|
||||
sender.sendMessage(locale.getString(ManageLang.PROGRESS_FAIL));
|
||||
sender.sendMessage(" §2✔: §f" + (i - failed));
|
||||
sender.sendMessage(" §c✕: §f" + failed);
|
||||
i++;
|
||||
if (i % 1000 == 0) {
|
||||
sender.sendMessage(i + " / " + size + " processed..");
|
||||
}
|
||||
});
|
||||
}
|
||||
sender.sendMessage(locale.getString(ManageLang.PROGRESS_SUCCESS));
|
||||
if (failed != 0) {
|
||||
sender.sendMessage(locale.getString(ManageLang.PROGRESS_FAIL));
|
||||
sender.sendMessage(" §2✔: §f" + (i - failed));
|
||||
sender.sendMessage(" §c✕: §f" + failed);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -29,6 +29,4 @@ import com.djrapitops.plan.delivery.domain.keys.PlaceholderKey;
|
||||
*/
|
||||
@Deprecated
|
||||
public class AnalysisContainer extends DynamicDataContainer {
|
||||
public AnalysisContainer() {
|
||||
}
|
||||
}
|
@ -58,15 +58,9 @@ public class PerServerContainer extends HashMap<UUID, DataContainer> {
|
||||
container.putSupplier(PerServerKeys.LAST_SEEN, () -> SessionsMutator.forContainer(container).toLastSeen());
|
||||
|
||||
container.putSupplier(PerServerKeys.WORLD_TIMES, () -> SessionsMutator.forContainer(container).toTotalWorldTimes());
|
||||
container.putSupplier(PerServerKeys.PLAYER_DEATHS, () -> SessionsMutator.forContainer(container).toPlayerDeathList());
|
||||
container.putSupplier(PerServerKeys.PLAYER_KILLS, () -> SessionsMutator.forContainer(container).toPlayerKillList());
|
||||
container.putSupplier(PerServerKeys.PLAYER_KILL_COUNT, () -> container.getValue(PerServerKeys.PLAYER_KILLS).map(Collection::size).orElse(0));
|
||||
container.putSupplier(PerServerKeys.PLAYER_KILL_COUNT, () -> SessionsMutator.forContainer(container).toPlayerKillCount());
|
||||
container.putSupplier(PerServerKeys.MOB_KILL_COUNT, () -> SessionsMutator.forContainer(container).toMobKillCount());
|
||||
container.putSupplier(PerServerKeys.DEATH_COUNT, () -> SessionsMutator.forContainer(container).toDeathCount());
|
||||
container.putSupplier(PerServerKeys.PLAYER_DEATH_COUNT, () -> SessionsMutator.forContainer(container).toPlayerDeathCount());
|
||||
container.putSupplier(PerServerKeys.MOB_DEATH_COUNT, () ->
|
||||
container.getValue(PerServerKeys.DEATH_COUNT).orElse(0) - container.getValue(PerServerKeys.PLAYER_DEATH_COUNT).orElse(0)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -33,6 +33,7 @@ import java.util.UUID;
|
||||
*
|
||||
* @author Rsl1122
|
||||
* @see com.djrapitops.plan.data.store.containers.AnalysisContainer for Suppliers for each Key.
|
||||
* @deprecated AnalysisContainer can no longer be obtained, so this is deprecated.
|
||||
*/
|
||||
@Deprecated
|
||||
public class AnalysisKeys {
|
||||
|
@ -45,8 +45,10 @@ public class PerServerKeys {
|
||||
@Deprecated
|
||||
public static final Key<List<PlayerDeath>> PLAYER_DEATHS = CommonKeys.PLAYER_DEATHS;
|
||||
public static final Key<Integer> PLAYER_KILL_COUNT = CommonKeys.PLAYER_KILL_COUNT;
|
||||
@Deprecated
|
||||
public static final Key<Integer> PLAYER_DEATH_COUNT = CommonKeys.PLAYER_DEATH_COUNT;
|
||||
public static final Key<Integer> MOB_KILL_COUNT = CommonKeys.MOB_KILL_COUNT;
|
||||
@Deprecated
|
||||
public static final Key<Integer> MOB_DEATH_COUNT = CommonKeys.MOB_DEATH_COUNT;
|
||||
public static final Key<Integer> DEATH_COUNT = CommonKeys.DEATH_COUNT;
|
||||
public static final Key<Long> LAST_SEEN = CommonKeys.LAST_SEEN;
|
||||
|
@ -28,7 +28,6 @@ import java.util.UUID;
|
||||
* Class that holds Key objects for PlayerContainer.
|
||||
*
|
||||
* @author Rsl1122
|
||||
* @see com.djrapitops.plan.storage.database.databases.sql.operation.SQLFetchOps For Suppliers for each key
|
||||
* @see PlayerContainer For DataContainer.
|
||||
*/
|
||||
public class PlayerKeys {
|
||||
|
@ -52,6 +52,9 @@ public class SessionKeys {
|
||||
@Deprecated
|
||||
public static final Key<List<PlayerDeath>> PLAYER_DEATHS = CommonKeys.PLAYER_DEATHS;
|
||||
|
||||
/**
|
||||
* @deprecated use WorldAliasSettings#getLongestWorldPlayed(Session) instead.
|
||||
*/
|
||||
@Deprecated
|
||||
public static final Key<String> LONGEST_WORLD_PLAYED = new Key<>(String.class, "longest_world_played");
|
||||
|
||||
|
@ -106,10 +106,7 @@ public class SessionsMutator {
|
||||
*/
|
||||
@Deprecated
|
||||
public List<PlayerDeath> toPlayerDeathList() {
|
||||
return sessions.stream()
|
||||
.map(session -> session.getValue(SessionKeys.PLAYER_DEATHS).orElse(new ArrayList<>()))
|
||||
.flatMap(Collection::stream)
|
||||
.collect(Collectors.toList());
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
public int toMobKillCount() {
|
||||
@ -241,12 +238,8 @@ public class SessionsMutator {
|
||||
return sorted;
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated Incorrect value, use PlayerVersusMutator instead.
|
||||
*/
|
||||
@Deprecated
|
||||
public int toPlayerDeathCount() {
|
||||
return toPlayerDeathList().size();
|
||||
return sessions.stream().mapToInt(session -> session.getValue(SessionKeys.DEATH_COUNT).orElse(0)).sum();
|
||||
}
|
||||
|
||||
public List<Long> toSessionStarts() {
|
||||
|
@ -96,9 +96,9 @@ public class ExportScheduler {
|
||||
int offsetMultiplier = proxy.isPresent() ? 1 : 0; // Delay first server export if on a network.
|
||||
for (Server server : servers) {
|
||||
taskSystem.registerTask("Server export",
|
||||
new ExportTask(exporter, exporter -> {
|
||||
exporter.exportServerPage(server);
|
||||
exporter.exportServerJSON(server);
|
||||
new ExportTask(exporter, same -> {
|
||||
same.exportServerPage(server);
|
||||
same.exportServerJSON(server);
|
||||
}, logger, errorHandler))
|
||||
.runTaskTimerAsynchronously(offset * offsetMultiplier, period);
|
||||
offsetMultiplier++;
|
||||
|
@ -22,6 +22,7 @@ public enum Family {
|
||||
SOLID(" fa fa-", "\"></i>"),
|
||||
REGULAR(" far fa-", "\"></i>"),
|
||||
BRAND(" fab fa-", "\"></i>"),
|
||||
@Deprecated
|
||||
LINE(" material-icons\">", "</i>");
|
||||
|
||||
private final String middle;
|
||||
|
@ -16,6 +16,8 @@
|
||||
*/
|
||||
package com.djrapitops.plan.delivery.rendering.json.graphs.bar;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public class Bar implements Comparable<Bar> {
|
||||
|
||||
private final String label;
|
||||
@ -38,4 +40,18 @@ public class Bar implements Comparable<Bar> {
|
||||
public int compareTo(Bar bar) {
|
||||
return Long.compare(bar.value, this.value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (!(o instanceof Bar)) return false;
|
||||
Bar bar = (Bar) o;
|
||||
return value == bar.value &&
|
||||
Objects.equals(label, bar.label);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(label, value);
|
||||
}
|
||||
}
|
||||
|
@ -33,7 +33,10 @@ import com.djrapitops.plan.storage.database.queries.objects.TPSQueries;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.*;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
@ -45,13 +48,10 @@ import java.util.concurrent.TimeUnit;
|
||||
public class NetworkOverviewJSONParser implements NetworkTabJSONParser<Map<String, Object>> {
|
||||
|
||||
private final Formatter<Long> day;
|
||||
private final TimeZone timeZone;
|
||||
private PlanConfig config;
|
||||
private DBSystem dbSystem;
|
||||
private ServerInfo serverInfo;
|
||||
private Formatter<Long> timeAmount;
|
||||
private Formatter<Double> decimals;
|
||||
private Formatter<Double> percentage;
|
||||
private Formatter<DateHolder> year;
|
||||
|
||||
@Inject
|
||||
@ -68,9 +68,6 @@ public class NetworkOverviewJSONParser implements NetworkTabJSONParser<Map<Strin
|
||||
year = formatters.year();
|
||||
day = formatters.dayLong();
|
||||
timeAmount = formatters.timeAmount();
|
||||
decimals = formatters.decimals();
|
||||
percentage = formatters.percentage();
|
||||
this.timeZone = config.getTimeZone();
|
||||
}
|
||||
|
||||
public Map<String, Object> createJSONAsMap() {
|
||||
|
@ -16,7 +16,6 @@
|
||||
*/
|
||||
package com.djrapitops.plan.delivery.rendering.pages;
|
||||
|
||||
import com.djrapitops.plan.delivery.domain.DateHolder;
|
||||
import com.djrapitops.plan.delivery.domain.keys.SessionKeys;
|
||||
import com.djrapitops.plan.delivery.formatting.Formatter;
|
||||
import com.djrapitops.plan.delivery.formatting.Formatters;
|
||||
@ -60,7 +59,6 @@ public class DebugPage implements Page {
|
||||
private final Timings timings;
|
||||
private final ErrorHandler errorHandler;
|
||||
|
||||
private final Formatter<DateHolder> secondFormatter;
|
||||
private final Formatter<Long> yearFormatter;
|
||||
|
||||
DebugPage(
|
||||
@ -79,7 +77,6 @@ public class DebugPage implements Page {
|
||||
this.timings = timings;
|
||||
this.errorHandler = errorHandler;
|
||||
|
||||
this.secondFormatter = formatters.second();
|
||||
this.yearFormatter = formatters.yearLong();
|
||||
}
|
||||
|
||||
|
@ -123,6 +123,7 @@ public class JSONCache {
|
||||
|
||||
@Inject
|
||||
public CleanTask() {
|
||||
// Dagger requires inject constructor
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -31,7 +31,6 @@ import com.djrapitops.plan.storage.database.DBSystem;
|
||||
import com.djrapitops.plan.storage.database.queries.containers.ContainerFetchQueries;
|
||||
import com.djrapitops.plan.storage.file.PlanFiles;
|
||||
import com.djrapitops.plan.version.VersionCheckSystem;
|
||||
import com.djrapitops.plugin.logging.error.ErrorHandler;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
@ -51,7 +50,6 @@ public class ResponseFactory {
|
||||
private final PageFactory pageFactory;
|
||||
private final Locale locale;
|
||||
private final DBSystem dbSystem;
|
||||
private final ErrorHandler errorHandler;
|
||||
|
||||
@Inject
|
||||
public ResponseFactory(
|
||||
@ -59,15 +57,13 @@ public class ResponseFactory {
|
||||
PlanFiles files,
|
||||
PageFactory pageFactory,
|
||||
Locale locale,
|
||||
DBSystem dbSystem,
|
||||
ErrorHandler errorHandler
|
||||
DBSystem dbSystem
|
||||
) {
|
||||
this.versionCheckSystem = versionCheckSystem;
|
||||
this.files = files;
|
||||
this.pageFactory = pageFactory;
|
||||
this.locale = locale;
|
||||
this.dbSystem = dbSystem;
|
||||
this.errorHandler = errorHandler;
|
||||
}
|
||||
|
||||
public Response debugPageResponse() {
|
||||
|
@ -29,7 +29,7 @@ public class DataExtensionMethodCallException extends IllegalStateException {
|
||||
|
||||
private final String pluginName;
|
||||
// Non serializable field due to Method not being serializable.
|
||||
private transient final MethodWrapper method;
|
||||
private final transient MethodWrapper method;
|
||||
|
||||
public DataExtensionMethodCallException(Throwable cause, String pluginName, MethodWrapper method) {
|
||||
super(cause);
|
||||
|
@ -232,23 +232,6 @@ public class ExtensionServerDataQuery implements Query<List<ExtensionData>> {
|
||||
return new ExtensionDescriptive(name, text, description, icon, priority);
|
||||
}
|
||||
|
||||
private ExtensionTabData.Factory extractTab(String tabName, ResultSet set, Map<String, ExtensionTabData.Factory> tabData) throws SQLException {
|
||||
Optional<Integer> tabPriority = Optional.of(set.getInt("tab_priority"));
|
||||
if (set.wasNull()) {
|
||||
tabPriority = Optional.empty();
|
||||
}
|
||||
Optional<ElementOrder[]> elementOrder = Optional.ofNullable(set.getString(ExtensionTabTable.ELEMENT_ORDER)).map(ElementOrder::deserialize);
|
||||
|
||||
Icon tabIcon = extractTabIcon(set);
|
||||
|
||||
return tabData.getOrDefault(tabName, new ExtensionTabData.Factory(new TabInformation(
|
||||
tabName,
|
||||
tabIcon,
|
||||
elementOrder.orElse(ElementOrder.values()),
|
||||
tabPriority.orElse(100)
|
||||
)));
|
||||
}
|
||||
|
||||
private Icon extractTabIcon(ResultSet set) throws SQLException {
|
||||
Optional<String> iconName = Optional.ofNullable(set.getString("tab_icon_name"));
|
||||
if (iconName.isPresent()) {
|
||||
|
@ -114,7 +114,7 @@ public class RemoveUnsatisfiedConditionalPlayerResultsTransaction extends Transa
|
||||
// Nested query here is required because MySQL limits update statements with nested queries:
|
||||
// The nested query creates a temporary table that bypasses the same table query-update limit.
|
||||
// Note: MySQL versions 5.6.7+ might optimize this nested query away leading to an exception.
|
||||
String sql = "DELETE FROM " + playerValueTable +
|
||||
String sql = DELETE_FROM + playerValueTable +
|
||||
WHERE + ExtensionPlayerValueTable.ID + " IN (" + SELECT + ExtensionPlayerValueTable.ID + FROM + '(' + selectUnsatisfiedValueIDs + ") as ids)";
|
||||
|
||||
return new ExecStatement(sql) {
|
||||
@ -142,7 +142,7 @@ public class RemoveUnsatisfiedConditionalPlayerResultsTransaction extends Transa
|
||||
// Nested query here is required because MySQL limits update statements with nested queries:
|
||||
// The nested query creates a temporary table that bypasses the same table query-update limit.
|
||||
// Note: MySQL versions 5.6.7+ might optimize this nested query away leading to an exception.
|
||||
String deleteValuesSQL = "DELETE FROM " + playerTableValueTable +
|
||||
String deleteValuesSQL = DELETE_FROM + playerTableValueTable +
|
||||
WHERE + ExtensionPlayerTableValueTable.TABLE_ID + " IN (" + SELECT + ExtensionTableProviderTable.ID + FROM + '(' + selectUnsatisfiedValueIDs + ") as ids)";
|
||||
|
||||
return new ExecStatement(deleteValuesSQL) {
|
||||
@ -178,7 +178,7 @@ public class RemoveUnsatisfiedConditionalPlayerResultsTransaction extends Transa
|
||||
// Nested query here is required because MySQL limits update statements with nested queries:
|
||||
// The nested query creates a temporary table that bypasses the same table query-update limit.
|
||||
// Note: MySQL versions 5.6.7+ might optimize this nested query away leading to an exception.
|
||||
String deleteValuesSQL = "DELETE FROM " + groupTable +
|
||||
String deleteValuesSQL = DELETE_FROM + groupTable +
|
||||
WHERE + ID + " IN (" + SELECT + ID + FROM + '(' + selectUnsatisfiedIDs + ") as ids)";
|
||||
|
||||
return new ExecStatement(deleteValuesSQL) {
|
||||
|
@ -86,7 +86,7 @@ public class RemoveUnsatisfiedConditionalServerResultsTransaction extends Transa
|
||||
// Nested query here is required because MySQL limits update statements with nested queries:
|
||||
// The nested query creates a temporary table that bypasses the same table query-update limit.
|
||||
// Note: MySQL versions 5.6.7+ might optimize this nested query away leading to an exception.
|
||||
String sql = "DELETE FROM " + serverValueTable +
|
||||
String sql = DELETE_FROM + serverValueTable +
|
||||
WHERE + ExtensionServerValueTable.ID + " IN (" + SELECT + ExtensionServerValueTable.ID + FROM + '(' + selectUnsatisfiedValueIDs + ") as ids)";
|
||||
|
||||
return new ExecStatement(sql) {
|
||||
@ -136,7 +136,7 @@ public class RemoveUnsatisfiedConditionalServerResultsTransaction extends Transa
|
||||
// Nested query here is required because MySQL limits update statements with nested queries:
|
||||
// The nested query creates a temporary table that bypasses the same table query-update limit.
|
||||
// Note: MySQL versions 5.6.7+ might optimize this nested query away leading to an exception.
|
||||
String deleteValuesSQL = "DELETE FROM " + serverTableValueTable +
|
||||
String deleteValuesSQL = DELETE_FROM + serverTableValueTable +
|
||||
WHERE + ExtensionServerTableValueTable.TABLE_ID + " IN (" + SELECT + ExtensionTableProviderTable.ID + FROM + '(' + selectUnsatisfiedValueIDs + ") as ids)";
|
||||
|
||||
return new ExecStatement(deleteValuesSQL) {
|
||||
|
@ -27,8 +27,7 @@ import java.sql.PreparedStatement;
|
||||
import java.sql.SQLException;
|
||||
import java.util.UUID;
|
||||
|
||||
import static com.djrapitops.plan.storage.database.sql.parsing.Sql.AND;
|
||||
import static com.djrapitops.plan.storage.database.sql.parsing.Sql.WHERE;
|
||||
import static com.djrapitops.plan.storage.database.sql.parsing.Sql.*;
|
||||
|
||||
/**
|
||||
* Transaction to store method result of a {@link com.djrapitops.plan.extension.implementation.providers.GroupDataProvider}.
|
||||
@ -62,7 +61,7 @@ public class StorePlayerGroupsResultTransaction extends Transaction {
|
||||
}
|
||||
|
||||
private Executable deleteOldValues() {
|
||||
String sql = "DELETE FROM " + ExtensionGroupsTable.TABLE_NAME +
|
||||
String sql = DELETE_FROM + ExtensionGroupsTable.TABLE_NAME +
|
||||
WHERE + ExtensionGroupsTable.USER_UUID + "=?" +
|
||||
AND + ExtensionGroupsTable.PROVIDER_ID + "=" + ExtensionProviderTable.STATEMENT_SELECT_PROVIDER_ID;
|
||||
|
||||
|
@ -78,7 +78,7 @@ public class StorePlayerTableResultTransaction extends Transaction {
|
||||
}
|
||||
|
||||
private Executable deleteOldValues(int tableID) {
|
||||
String sql = "DELETE FROM " + TABLE_NAME +
|
||||
String sql = DELETE_FROM + TABLE_NAME +
|
||||
WHERE + TABLE_ID + "=?" +
|
||||
AND + USER_UUID + "=?";
|
||||
|
||||
|
@ -76,7 +76,7 @@ public class StoreServerTableResultTransaction extends Transaction {
|
||||
}
|
||||
|
||||
private Executable deleteOldValues(int tableID) {
|
||||
String sql = "DELETE FROM " + TABLE_NAME +
|
||||
String sql = DELETE_FROM + TABLE_NAME +
|
||||
WHERE + TABLE_ID + "=?" +
|
||||
AND + SERVER_UUID + "=?";
|
||||
|
||||
|
@ -66,7 +66,6 @@ public class Session extends DynamicDataContainer implements DateHolder {
|
||||
putSupplier(SessionKeys.START, this::getSessionStart);
|
||||
putSupplier(SessionKeys.WORLD_TIMES, this::getWorldTimes);
|
||||
putSupplier(SessionKeys.PLAYER_KILLS, this::getPlayerKills);
|
||||
putRawData(SessionKeys.PLAYER_DEATHS, new ArrayList<>());
|
||||
putSupplier(SessionKeys.MOB_KILL_COUNT, this::getMobKills);
|
||||
putSupplier(SessionKeys.DEATH_COUNT, this::getDeaths);
|
||||
putSupplier(SessionKeys.AFK_TIME, this::getAfkTime);
|
||||
@ -75,8 +74,6 @@ public class Session extends DynamicDataContainer implements DateHolder {
|
||||
putSupplier(SessionKeys.LENGTH, () ->
|
||||
getValue(SessionKeys.END).orElse(System.currentTimeMillis()) - getUnsafe(SessionKeys.START));
|
||||
putSupplier(SessionKeys.ACTIVE_TIME, () -> getUnsafe(SessionKeys.LENGTH) - getUnsafe(SessionKeys.AFK_TIME));
|
||||
|
||||
putRawData(SessionKeys.LONGEST_WORLD_PLAYED, "Key is Deprecated, use WorldAliasSettings#getLongestWorldPlayed(Session) instead.");
|
||||
}
|
||||
|
||||
/**
|
||||
@ -113,7 +110,6 @@ public class Session extends DynamicDataContainer implements DateHolder {
|
||||
putRawData(SessionKeys.END, sessionEnd);
|
||||
putSupplier(SessionKeys.WORLD_TIMES, this::getWorldTimes);
|
||||
putSupplier(SessionKeys.PLAYER_KILLS, this::getPlayerKills);
|
||||
putRawData(SessionKeys.PLAYER_DEATHS, new ArrayList<>());
|
||||
putSupplier(SessionKeys.MOB_KILL_COUNT, this::getMobKills);
|
||||
putSupplier(SessionKeys.DEATH_COUNT, this::getDeaths);
|
||||
putSupplier(SessionKeys.AFK_TIME, this::getAfkTime);
|
||||
@ -123,8 +119,6 @@ public class Session extends DynamicDataContainer implements DateHolder {
|
||||
putSupplier(SessionKeys.LENGTH, () ->
|
||||
getValue(SessionKeys.END).orElse(System.currentTimeMillis()) - getUnsafe(SessionKeys.START));
|
||||
putSupplier(SessionKeys.ACTIVE_TIME, () -> getUnsafe(SessionKeys.LENGTH) - getUnsafe(SessionKeys.AFK_TIME));
|
||||
|
||||
putRawData(SessionKeys.LONGEST_WORLD_PLAYED, "Key is Deprecated, use WorldAliasSettings#getLongestWorldPlayed(Session) instead.");
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -16,8 +16,6 @@
|
||||
*/
|
||||
package com.djrapitops.plan.modules;
|
||||
|
||||
import com.djrapitops.plan.api.CommonAPI;
|
||||
import com.djrapitops.plan.api.PlanAPI;
|
||||
import com.djrapitops.plan.gathering.importing.EmptyImportSystem;
|
||||
import com.djrapitops.plan.gathering.importing.ImportSystem;
|
||||
import com.djrapitops.plan.settings.ConfigSystem;
|
||||
@ -35,9 +33,6 @@ import dagger.Module;
|
||||
@Module
|
||||
public interface ProxySuperClassBindingModule {
|
||||
|
||||
@Binds
|
||||
PlanAPI bindProxyPlanAPI(CommonAPI proxyAPI);
|
||||
|
||||
@Binds
|
||||
DBSystem bindProxyDatabaseSystem(ProxyDBSystem proxyDBSystem);
|
||||
|
||||
|
@ -1,35 +0,0 @@
|
||||
/*
|
||||
* This file is part of Player Analytics (Plan).
|
||||
*
|
||||
* Plan is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License v3 as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Plan 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 Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Plan. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.djrapitops.plan.modules;
|
||||
|
||||
import com.djrapitops.plan.api.CommonAPI;
|
||||
import com.djrapitops.plan.api.PlanAPI;
|
||||
import dagger.Binds;
|
||||
import dagger.Module;
|
||||
|
||||
/**
|
||||
* Module for binding Server specific classes to the interface implementations.
|
||||
*
|
||||
* @author Rsl1122
|
||||
*/
|
||||
@Module
|
||||
public interface ServerSuperClassBindingModule {
|
||||
|
||||
@Binds
|
||||
PlanAPI bindServerPlanAPI(CommonAPI serverAPI);
|
||||
|
||||
}
|
@ -57,9 +57,9 @@ public class Processing implements SubSystem {
|
||||
return Executors.newFixedThreadPool(i,
|
||||
new BasicThreadFactory.Builder()
|
||||
.namingPattern(s)
|
||||
.uncaughtExceptionHandler((thread, throwable) -> {
|
||||
errorHandler.log(L.WARN, Processing.class, throwable);
|
||||
}).build());
|
||||
.uncaughtExceptionHandler((thread, throwable) ->
|
||||
errorHandler.log(L.WARN, Processing.class, throwable)
|
||||
).build());
|
||||
}
|
||||
|
||||
public void submit(Runnable runnable) {
|
||||
|
@ -30,11 +30,7 @@ import com.djrapitops.plan.settings.config.paths.key.StringSetting;
|
||||
public class DisplaySettings {
|
||||
|
||||
public static final Setting<String> THEME = new StringSetting("Display_options.Theme");
|
||||
@Deprecated // Removed in 5.0.0
|
||||
public static final Setting<Boolean> REPLACE_SESSION_ACCORDION_WITH_TABLE = new BooleanSetting("Display_options.Sessions.Replace_accordion_with_table");
|
||||
public static final Setting<Integer> SESSIONS_PER_PAGE = new IntegerSetting("Display_options.Sessions.Show_on_page");
|
||||
@Deprecated // Removed in 5.0.0
|
||||
public static final Setting<Boolean> SESSION_MOST_PLAYED_WORLD_IN_TITLE = new BooleanSetting("Display_options.Sessions.Show_most_played_world_in_title");
|
||||
public static final Setting<Boolean> ORDER_WORLD_PIE_BY_PERC = new BooleanSetting("Display_options.Sessions.Order_world_pies_by_percentage");
|
||||
public static final Setting<Integer> PLAYERS_PER_SERVER_PAGE = new IntegerSetting("Display_options.Players_table.Show_on_server_page");
|
||||
public static final Setting<Integer> PLAYERS_PER_PLAYERS_PAGE = new IntegerSetting("Display_options.Players_table.Show_on_players_page");
|
||||
|
@ -110,8 +110,8 @@ public class ServerSettingsManager implements SubSystem {
|
||||
Database database = dbSystem.getDatabase();
|
||||
|
||||
try (ConfigReader reader = new ConfigReader(file.toPath())) {
|
||||
Config config = reader.read();
|
||||
database.executeTransaction(new StoreConfigTransaction(serverInfo.getServerUUID(), config, file.lastModified()));
|
||||
Config read = reader.read();
|
||||
database.executeTransaction(new StoreConfigTransaction(serverInfo.getServerUUID(), read, file.lastModified()));
|
||||
logger.debug("Server config saved to database.");
|
||||
} catch (IOException e) {
|
||||
throw new UncheckedIOException(e);
|
||||
|
@ -94,15 +94,9 @@ public class AllPlayerContainersQuery implements Query<List<PlayerContainer>> {
|
||||
container.putSupplier(PerServerKeys.LAST_SEEN, () -> SessionsMutator.forContainer(container).toLastSeen());
|
||||
|
||||
container.putSupplier(PerServerKeys.WORLD_TIMES, () -> SessionsMutator.forContainer(container).toTotalWorldTimes());
|
||||
container.putSupplier(PerServerKeys.PLAYER_DEATHS, () -> SessionsMutator.forContainer(container).toPlayerDeathList());
|
||||
container.putSupplier(PerServerKeys.PLAYER_KILLS, () -> SessionsMutator.forContainer(container).toPlayerKillList());
|
||||
container.putSupplier(PerServerKeys.PLAYER_KILL_COUNT, () -> container.getValue(PerServerKeys.PLAYER_KILLS).map(Collection::size).orElse(0));
|
||||
container.putSupplier(PerServerKeys.PLAYER_KILL_COUNT, () -> SessionsMutator.forContainer(container).toPlayerKillCount());
|
||||
container.putSupplier(PerServerKeys.MOB_KILL_COUNT, () -> SessionsMutator.forContainer(container).toMobKillCount());
|
||||
container.putSupplier(PerServerKeys.DEATH_COUNT, () -> SessionsMutator.forContainer(container).toDeathCount());
|
||||
container.putSupplier(PerServerKeys.PLAYER_DEATH_COUNT, () -> SessionsMutator.forContainer(container).toPlayerDeathCount());
|
||||
container.putSupplier(PerServerKeys.MOB_DEATH_COUNT, () ->
|
||||
container.getValue(PerServerKeys.DEATH_COUNT).orElse(0) - container.getValue(PerServerKeys.PLAYER_DEATH_COUNT).orElse(0)
|
||||
);
|
||||
perServerContainer.put(serverUUID, container);
|
||||
perServerContainers.put(playerUUID, perServerContainer);
|
||||
}
|
||||
|
@ -21,7 +21,6 @@ import com.djrapitops.plan.delivery.domain.container.PerServerContainer;
|
||||
import com.djrapitops.plan.delivery.domain.container.SupplierDataContainer;
|
||||
import com.djrapitops.plan.delivery.domain.keys.Key;
|
||||
import com.djrapitops.plan.delivery.domain.keys.PerServerKeys;
|
||||
import com.djrapitops.plan.delivery.domain.mutators.SessionsMutator;
|
||||
import com.djrapitops.plan.gathering.domain.Session;
|
||||
import com.djrapitops.plan.gathering.domain.UserInfo;
|
||||
import com.djrapitops.plan.storage.database.SQLDB;
|
||||
@ -55,18 +54,10 @@ public class PerServerContainerQuery implements Query<PerServerContainer> {
|
||||
userInformation(db, perServerContainer);
|
||||
lastSeen(db, perServerContainer);
|
||||
playerKillCount(db, perServerContainer);
|
||||
playerDeathCount(db, perServerContainer);
|
||||
mobKillCount(db, perServerContainer);
|
||||
totalDeathCount(db, perServerContainer);
|
||||
worldTimes(db, perServerContainer);
|
||||
|
||||
// After-values that can be calculated without database.
|
||||
for (DataContainer serverContainer : perServerContainer.values()) {
|
||||
serverContainer.putSupplier(PerServerKeys.MOB_DEATH_COUNT, () ->
|
||||
serverContainer.getValue(PerServerKeys.DEATH_COUNT).orElse(0) - serverContainer.getValue(PerServerKeys.PLAYER_DEATH_COUNT).orElse(0)
|
||||
);
|
||||
}
|
||||
|
||||
Map<UUID, List<Session>> sessions = db.query(SessionQueries.fetchSessionsOfPlayer(playerUUID));
|
||||
for (Map.Entry<UUID, List<Session>> entry : sessions.entrySet()) {
|
||||
UUID serverUUID = entry.getKey();
|
||||
@ -75,9 +66,6 @@ public class PerServerContainerQuery implements Query<PerServerContainer> {
|
||||
DataContainer serverContainer = perServerContainer.getOrDefault(serverUUID, new SupplierDataContainer());
|
||||
serverContainer.putRawData(PerServerKeys.SESSIONS, serverSessions);
|
||||
|
||||
serverContainer.putSupplier(PerServerKeys.PLAYER_KILLS, () -> SessionsMutator.forContainer(serverContainer).toPlayerKillList());
|
||||
serverContainer.putSupplier(PerServerKeys.PLAYER_DEATHS, () -> SessionsMutator.forContainer(serverContainer).toPlayerDeathList());
|
||||
|
||||
perServerContainer.put(serverUUID, serverContainer);
|
||||
}
|
||||
|
||||
@ -92,10 +80,6 @@ public class PerServerContainerQuery implements Query<PerServerContainer> {
|
||||
matchingEntrySet(PerServerKeys.WORLD_TIMES, WorldTimesQueries.fetchPlayerWorldTimesOnServers(playerUUID), db, container);
|
||||
}
|
||||
|
||||
private void playerDeathCount(SQLDB db, PerServerContainer container) {
|
||||
matchingEntrySet(PerServerKeys.PLAYER_DEATH_COUNT, PerServerAggregateQueries.playerDeathCountOnServers(playerUUID), db, container);
|
||||
}
|
||||
|
||||
private void mobKillCount(SQLDB db, PerServerContainer container) {
|
||||
matchingEntrySet(PerServerKeys.MOB_KILL_COUNT, PerServerAggregateQueries.mobKillCountOnServers(playerUUID), db, container);
|
||||
}
|
||||
|
@ -86,7 +86,6 @@ public class PlayerContainerQuery implements Query<PlayerContainer> {
|
||||
container.putSupplier(PlayerKeys.LAST_SEEN, () -> SessionsMutator.forContainer(container).toLastSeen());
|
||||
container.putSupplier(PlayerKeys.PLAYER_KILLS, () -> db.query(KillQueries.fetchPlayerKillsOfPlayer(uuid)));
|
||||
container.putSupplier(PlayerKeys.PLAYER_DEATHS_KILLS, () -> db.query(KillQueries.fetchPlayerDeathsOfPlayer(uuid)));
|
||||
container.putSupplier(PlayerKeys.PLAYER_DEATHS, () -> SessionsMutator.forContainer(container).toPlayerDeathList());
|
||||
container.putSupplier(PlayerKeys.PLAYER_KILL_COUNT, () -> container.getValue(PlayerKeys.PLAYER_KILLS).map(Collection::size).orElse(0));
|
||||
container.putSupplier(PlayerKeys.MOB_KILL_COUNT, () -> SessionsMutator.forContainer(container).toMobKillCount());
|
||||
container.putSupplier(PlayerKeys.DEATH_COUNT, () -> SessionsMutator.forContainer(container).toDeathCount());
|
||||
|
@ -151,7 +151,6 @@ public class PingQueries {
|
||||
PingTable.MAX_PING + ", " +
|
||||
PingTable.MIN_PING + ", " +
|
||||
PingTable.AVG_PING + ", " +
|
||||
PingTable.USER_UUID + ", " +
|
||||
PingTable.SERVER_UUID +
|
||||
FROM + PingTable.TABLE_NAME +
|
||||
WHERE + PingTable.SERVER_UUID + "=?" +
|
||||
@ -170,7 +169,6 @@ public class PingQueries {
|
||||
List<Ping> pings = new ArrayList<>();
|
||||
|
||||
while (set.next()) {
|
||||
UUID uuid = UUID.fromString(set.getString(PingTable.USER_UUID));
|
||||
UUID serverUUID = UUID.fromString(set.getString(PingTable.SERVER_UUID));
|
||||
long date = set.getLong(PingTable.DATE);
|
||||
double avgPing = set.getDouble(PingTable.AVG_PING);
|
||||
|
@ -21,31 +21,31 @@ import java.util.concurrent.TimeUnit;
|
||||
/**
|
||||
* Duplicate String reducing utility class for SQL language Strings.
|
||||
*/
|
||||
public interface Sql {
|
||||
String ID = "id";
|
||||
String P_UUID = "uuid";
|
||||
public abstract class Sql {
|
||||
public static final String ID = "id";
|
||||
public static final String P_UUID = "uuid";
|
||||
|
||||
String INT = "integer";
|
||||
String DOUBLE = "double";
|
||||
String LONG = "bigint";
|
||||
String BOOL = "boolean";
|
||||
public static final String INT = "integer";
|
||||
public static final String DOUBLE = "double";
|
||||
public static final String LONG = "bigint";
|
||||
public static final String BOOL = "boolean";
|
||||
|
||||
String SELECT = "SELECT ";
|
||||
String DISTINCT = "DISTINCT ";
|
||||
String FROM = " FROM ";
|
||||
String DELETE_FROM = "DELETE" + FROM;
|
||||
String WHERE = " WHERE ";
|
||||
String GROUP_BY = " GROUP BY ";
|
||||
String ORDER_BY = " ORDER BY ";
|
||||
String INNER_JOIN = " JOIN ";
|
||||
String LEFT_JOIN = " LEFT JOIN ";
|
||||
String UNION = " UNION ";
|
||||
String AND = " AND ";
|
||||
String OR = " OR ";
|
||||
String IS_NULL = " IS NULL";
|
||||
String IS_NOT_NULL = " IS NOT NULL";
|
||||
public static final String SELECT = "SELECT ";
|
||||
public static final String DISTINCT = "DISTINCT ";
|
||||
public static final String FROM = " FROM ";
|
||||
public static final String DELETE_FROM = "DELETE" + FROM;
|
||||
public static final String WHERE = " WHERE ";
|
||||
public static final String GROUP_BY = " GROUP BY ";
|
||||
public static final String ORDER_BY = " ORDER BY ";
|
||||
public static final String INNER_JOIN = " JOIN ";
|
||||
public static final String LEFT_JOIN = " LEFT JOIN ";
|
||||
public static final String UNION = " UNION ";
|
||||
public static final String AND = " AND ";
|
||||
public static final String OR = " OR ";
|
||||
public static final String IS_NULL = " IS NULL";
|
||||
public static final String IS_NOT_NULL = " IS NOT NULL";
|
||||
|
||||
static String varchar(int length) {
|
||||
public static String varchar(int length) {
|
||||
return "varchar(" + length + ')';
|
||||
}
|
||||
|
||||
@ -57,22 +57,22 @@ public interface Sql {
|
||||
* @param day 1 = Sunday, 2 = Monday etc.. 7 = Saturday
|
||||
* @return Milliseconds since epoch for this day to be given by {@link java.text.SimpleDateFormat} "EEEE"
|
||||
*/
|
||||
static long getDayEpochMs(int day) {
|
||||
return TimeUnit.DAYS.toMillis(day + 2);
|
||||
public static long getDayEpochMs(int day) {
|
||||
return TimeUnit.DAYS.toMillis(day + 2L);
|
||||
}
|
||||
|
||||
String epochSecondToDate(String sql);
|
||||
public abstract String epochSecondToDate(String sql);
|
||||
|
||||
String dateToEpochSecond(String sql);
|
||||
public abstract String dateToEpochSecond(String sql);
|
||||
|
||||
String dateToDayStamp(String sql);
|
||||
public abstract String dateToDayStamp(String sql);
|
||||
|
||||
String dateToDayOfWeek(String sql);
|
||||
public abstract String dateToDayOfWeek(String sql);
|
||||
|
||||
String dateToHour(String sql);
|
||||
public abstract String dateToHour(String sql);
|
||||
|
||||
// https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html
|
||||
class MySQL implements Sql {
|
||||
public static class MySQL extends Sql {
|
||||
|
||||
@Override
|
||||
public String epochSecondToDate(String sql) {
|
||||
@ -101,7 +101,7 @@ public interface Sql {
|
||||
}
|
||||
|
||||
// https://h2database.com/html/functions.html
|
||||
class H2 extends MySQL {
|
||||
public static class H2 extends MySQL {
|
||||
|
||||
@Override
|
||||
public String epochSecondToDate(String sql) {
|
||||
@ -125,7 +125,7 @@ public interface Sql {
|
||||
}
|
||||
|
||||
// https://sqlite.org/lang_datefunc.html
|
||||
class SQLite implements Sql {
|
||||
public static class SQLite extends Sql {
|
||||
|
||||
@Override
|
||||
public String epochSecondToDate(String sql) {
|
||||
|
@ -1,35 +0,0 @@
|
||||
/*
|
||||
* This file is part of Player Analytics (Plan).
|
||||
*
|
||||
* Plan is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License v3 as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Plan 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 Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Plan. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.djrapitops.plan.utilities.comparators;
|
||||
|
||||
import com.djrapitops.plan.data.plugin.PluginData;
|
||||
|
||||
import java.util.Comparator;
|
||||
|
||||
/**
|
||||
* Comparator for PluginData for Alphabetical Name order.
|
||||
*
|
||||
* @author Rsl1122
|
||||
*/
|
||||
@Deprecated
|
||||
public class PluginDataNameComparator implements Comparator<PluginData> {
|
||||
|
||||
@Override
|
||||
public int compare(PluginData u1, PluginData u2) {
|
||||
return u1.getSourcePlugin().compareTo(u2.getSourcePlugin());
|
||||
}
|
||||
}
|
@ -21,7 +21,6 @@ import com.djrapitops.plan.PlanSystem;
|
||||
import com.djrapitops.plan.commands.PlanCommand;
|
||||
import com.djrapitops.plan.modules.APFModule;
|
||||
import com.djrapitops.plan.modules.FilesModule;
|
||||
import com.djrapitops.plan.modules.ServerSuperClassBindingModule;
|
||||
import com.djrapitops.plan.modules.SystemObjectProvidingModule;
|
||||
import dagger.BindsInstance;
|
||||
import dagger.Component;
|
||||
@ -40,7 +39,6 @@ import javax.inject.Singleton;
|
||||
APFModule.class,
|
||||
FilesModule.class,
|
||||
PluginServerPropertiesModule.class,
|
||||
ServerSuperClassBindingModule.class,
|
||||
PluginSuperClassBindingModule.class
|
||||
})
|
||||
public interface PlanPluginComponent {
|
||||
|
@ -105,7 +105,7 @@ public class ExtensionRegister {
|
||||
) {
|
||||
try {
|
||||
// Creates the extension with factory and registers it
|
||||
createExtension.apply(factory).flatMap(this::register);
|
||||
createExtension.apply(factory).ifPresent(this::register);
|
||||
} catch (NotReadyException ignore) {
|
||||
// This exception signals that the extension can not be registered right now (Intended fail).
|
||||
} catch (Exception | NoClassDefFoundError | IncompatibleClassChangeError e) {
|
||||
|
@ -20,7 +20,6 @@ import com.djrapitops.plan.commands.PlanCommand;
|
||||
import com.djrapitops.plan.gathering.ServerShutdownSave;
|
||||
import com.djrapitops.plan.modules.APFModule;
|
||||
import com.djrapitops.plan.modules.FilesModule;
|
||||
import com.djrapitops.plan.modules.ServerSuperClassBindingModule;
|
||||
import com.djrapitops.plan.modules.SystemObjectProvidingModule;
|
||||
import com.djrapitops.plan.modules.sponge.SpongePlanModule;
|
||||
import com.djrapitops.plan.modules.sponge.SpongeServerPropertiesModule;
|
||||
@ -41,7 +40,6 @@ import javax.inject.Singleton;
|
||||
SystemObjectProvidingModule.class,
|
||||
APFModule.class,
|
||||
FilesModule.class,
|
||||
ServerSuperClassBindingModule.class,
|
||||
SpongeSuperClassBindingModule.class,
|
||||
SpongeServerPropertiesModule.class
|
||||
})
|
||||
|
Loading…
Reference in New Issue
Block a user