mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2025-04-15 16:45:44 +02:00
Fixed some code smells in the new code:
- Moved ServerTable#getServerUUIDsByID to NicknameLastSeenPatch - Removed unused things in UserInfoTable, Setting & RawDataResponse - Refactored FileWatcher into smaller methods - Renamed 'locale' in DateFormatter (Hiding an instance variable)
This commit is contained in:
parent
05fc528e51
commit
09f51ee087
@ -20,7 +20,9 @@ import com.djrapitops.plan.data.store.objects.Nickname;
|
|||||||
import com.djrapitops.plan.system.database.databases.sql.SQLDB;
|
import com.djrapitops.plan.system.database.databases.sql.SQLDB;
|
||||||
import com.djrapitops.plan.system.database.databases.sql.processing.ExecStatement;
|
import com.djrapitops.plan.system.database.databases.sql.processing.ExecStatement;
|
||||||
import com.djrapitops.plan.system.database.databases.sql.processing.QueryAllStatement;
|
import com.djrapitops.plan.system.database.databases.sql.processing.QueryAllStatement;
|
||||||
|
import com.djrapitops.plan.system.database.databases.sql.statements.Select;
|
||||||
import com.djrapitops.plan.system.database.databases.sql.tables.NicknamesTable;
|
import com.djrapitops.plan.system.database.databases.sql.tables.NicknamesTable;
|
||||||
|
import com.djrapitops.plan.system.database.databases.sql.tables.ServerTable;
|
||||||
|
|
||||||
import java.sql.PreparedStatement;
|
import java.sql.PreparedStatement;
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
@ -53,7 +55,7 @@ public class NicknameLastSeenPatch extends Patch {
|
|||||||
db.executeUnsafe("CREATE TABLE IF NOT EXISTS plan_actions " +
|
db.executeUnsafe("CREATE TABLE IF NOT EXISTS plan_actions " +
|
||||||
"(action_id integer, date bigint, server_id integer, user_id integer, additional_info varchar(1))");
|
"(action_id integer, date bigint, server_id integer, user_id integer, additional_info varchar(1))");
|
||||||
|
|
||||||
Map<Integer, UUID> serverUUIDsByID = db.getServerTable().getServerUUIDsByID();
|
Map<Integer, UUID> serverUUIDsByID = getServerUUIDsByID();
|
||||||
Map<UUID, Integer> serverIDsByUUID = new HashMap<>();
|
Map<UUID, Integer> serverIDsByUUID = new HashMap<>();
|
||||||
for (Map.Entry<Integer, UUID> entry : serverUUIDsByID.entrySet()) {
|
for (Map.Entry<Integer, UUID> entry : serverUUIDsByID.entrySet()) {
|
||||||
serverIDsByUUID.put(entry.getValue(), entry.getKey());
|
serverIDsByUUID.put(entry.getValue(), entry.getKey());
|
||||||
@ -65,6 +67,24 @@ public class NicknameLastSeenPatch extends Patch {
|
|||||||
db.executeUnsafe("DROP TABLE plan_actions");
|
db.executeUnsafe("DROP TABLE plan_actions");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Map<Integer, UUID> getServerUUIDsByID() {
|
||||||
|
String sql = Select.from(ServerTable.TABLE_NAME,
|
||||||
|
ServerTable.Col.SERVER_ID, ServerTable.Col.SERVER_UUID)
|
||||||
|
.toString();
|
||||||
|
|
||||||
|
return query(new QueryAllStatement<Map<Integer, UUID>>(sql) {
|
||||||
|
@Override
|
||||||
|
public Map<Integer, UUID> processResults(ResultSet set) throws SQLException {
|
||||||
|
Map<Integer, UUID> uuids = new HashMap<>();
|
||||||
|
while (set.next()) {
|
||||||
|
int id = set.getInt(ServerTable.Col.SERVER_ID.get());
|
||||||
|
uuids.put(id, UUID.fromString(set.getString(ServerTable.Col.SERVER_UUID.get())));
|
||||||
|
}
|
||||||
|
return uuids;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private Map<Integer, Set<Nickname>> getNicknamesByUserID(Map<Integer, UUID> serverUUIDsByID) {
|
private Map<Integer, Set<Nickname>> getNicknamesByUserID(Map<Integer, UUID> serverUUIDsByID) {
|
||||||
String fetchSQL = "SELECT * FROM plan_actions WHERE action_id=3 ORDER BY date DESC";
|
String fetchSQL = "SELECT * FROM plan_actions WHERE action_id=3 ORDER BY date DESC";
|
||||||
return query(new QueryAllStatement<Map<Integer, Set<Nickname>>>(fetchSQL, 10000) {
|
return query(new QueryAllStatement<Map<Integer, Set<Nickname>>>(fetchSQL, 10000) {
|
||||||
|
@ -205,25 +205,6 @@ public class ServerTable extends Table {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
public Map<Integer, UUID> getServerUUIDsByID() {
|
|
||||||
String sql = Select.from(tableName,
|
|
||||||
Col.SERVER_ID, Col.SERVER_UUID)
|
|
||||||
.toString();
|
|
||||||
|
|
||||||
return query(new QueryAllStatement<Map<Integer, UUID>>(sql) {
|
|
||||||
@Override
|
|
||||||
public Map<Integer, UUID> processResults(ResultSet set) throws SQLException {
|
|
||||||
Map<Integer, UUID> uuids = new HashMap<>();
|
|
||||||
while (set.next()) {
|
|
||||||
int id = set.getInt(Col.SERVER_ID.get());
|
|
||||||
uuids.put(id, UUID.fromString(set.getString(Col.SERVER_UUID.get())));
|
|
||||||
}
|
|
||||||
return uuids;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used to get BungeeCord WebServer info if present.
|
* Used to get BungeeCord WebServer info if present.
|
||||||
*
|
*
|
||||||
|
@ -48,12 +48,10 @@ public class UserInfoTable extends UserUUIDTable {
|
|||||||
|
|
||||||
private final String insertStatement;
|
private final String insertStatement;
|
||||||
|
|
||||||
private final ServerTable serverTable;
|
|
||||||
private final UsersTable usersTable;
|
private final UsersTable usersTable;
|
||||||
|
|
||||||
public UserInfoTable(SQLDB db) {
|
public UserInfoTable(SQLDB db) {
|
||||||
super(TABLE_NAME, db);
|
super(TABLE_NAME, db);
|
||||||
serverTable = db.getServerTable();
|
|
||||||
usersTable = db.getUsersTable();
|
usersTable = db.getUsersTable();
|
||||||
insertStatement = "INSERT INTO " + tableName + " (" +
|
insertStatement = "INSERT INTO " + tableName + " (" +
|
||||||
Col.UUID + ", " +
|
Col.UUID + ", " +
|
||||||
|
@ -29,7 +29,6 @@ import java.util.function.Predicate;
|
|||||||
public abstract class Setting<T> {
|
public abstract class Setting<T> {
|
||||||
|
|
||||||
protected final String path;
|
protected final String path;
|
||||||
private final Type<T> type;
|
|
||||||
private final Predicate<T> validator;
|
private final Predicate<T> validator;
|
||||||
|
|
||||||
public Setting(String path, Class<T> type) {
|
public Setting(String path, Class<T> type) {
|
||||||
@ -46,7 +45,6 @@ public abstract class Setting<T> {
|
|||||||
|
|
||||||
public Setting(String path, Type<T> type, Predicate<T> validator) {
|
public Setting(String path, Type<T> type, Predicate<T> validator) {
|
||||||
this.path = path;
|
this.path = path;
|
||||||
this.type = type;
|
|
||||||
this.validator = validator;
|
this.validator = validator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -75,7 +75,7 @@ public class RawDataResponse extends Response {
|
|||||||
|
|
||||||
private List handleList(List list) {
|
private List handleList(List list) {
|
||||||
if (list.stream().findAny().orElse(null) instanceof DataContainer) {
|
if (list.stream().findAny().orElse(null) instanceof DataContainer) {
|
||||||
return ((List<Object>) list.stream().map((obj) -> mapToNormalMap((DataContainer) obj)).collect(Collectors.toList()));
|
return (List) list.stream().map((obj) -> mapToNormalMap((DataContainer) obj)).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
@ -55,7 +55,7 @@ public class FileWatcher extends Thread {
|
|||||||
this.running = false;
|
this.running = false;
|
||||||
this.watchedFiles = watchedFiles;
|
this.watchedFiles = watchedFiles;
|
||||||
|
|
||||||
Verify.isTrue(Files.isDirectory(folder.toPath()), () -> new IllegalArgumentException("Given File " + folder.getAbsolutePath() + " was not a folder."));
|
Verify.isTrue(folder.isDirectory(), () -> new IllegalArgumentException("Given File " + folder.getAbsolutePath() + " was not a folder."));
|
||||||
|
|
||||||
watchedPath = folder.toPath();
|
watchedPath = folder.toPath();
|
||||||
}
|
}
|
||||||
@ -69,31 +69,7 @@ public class FileWatcher extends Thread {
|
|||||||
this.running = true;
|
this.running = true;
|
||||||
try (WatchService watcher = FileSystems.getDefault().newWatchService()) {
|
try (WatchService watcher = FileSystems.getDefault().newWatchService()) {
|
||||||
watchedPath.register(watcher, ENTRY_MODIFY);
|
watchedPath.register(watcher, ENTRY_MODIFY);
|
||||||
|
runLoop(watcher);
|
||||||
while (running) {
|
|
||||||
WatchKey key = watcher.take();
|
|
||||||
|
|
||||||
if (key == null) {
|
|
||||||
Thread.yield();
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (WatchEvent<?> event : key.pollEvents()) {
|
|
||||||
if (event.kind() != ENTRY_MODIFY) {
|
|
||||||
Thread.yield();
|
|
||||||
} else {
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
Path modifiedFile = ((WatchEvent<Path>) event).context();
|
|
||||||
|
|
||||||
for (WatchedFile watchedFile : watchedFiles) {
|
|
||||||
watchedFile.modified(modifiedFile);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!key.reset()) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
errorHandler.log(L.ERROR, this.getClass(), e);
|
errorHandler.log(L.ERROR, this.getClass(), e);
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
@ -101,6 +77,45 @@ public class FileWatcher extends Thread {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void runLoop(WatchService watcher) throws InterruptedException {
|
||||||
|
while (running) {
|
||||||
|
// Blocking operation
|
||||||
|
WatchKey key = watcher.take();
|
||||||
|
|
||||||
|
if (key == null) {
|
||||||
|
Thread.yield();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
pollEvents(key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void pollEvents(WatchKey key) {
|
||||||
|
for (WatchEvent<?> event : key.pollEvents()) {
|
||||||
|
handleEvent(event);
|
||||||
|
if (!key.reset()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleEvent(WatchEvent<?> event) {
|
||||||
|
if (event.kind() != ENTRY_MODIFY) {
|
||||||
|
Thread.yield();
|
||||||
|
} else {
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
Path modifiedFile = ((WatchEvent<Path>) event).context();
|
||||||
|
actOnModification(modifiedFile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void actOnModification(Path modifiedFile) {
|
||||||
|
for (WatchedFile watchedFile : watchedFiles) {
|
||||||
|
watchedFile.modified(modifiedFile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void interrupt() {
|
public void interrupt() {
|
||||||
running = false;
|
running = false;
|
||||||
|
@ -48,10 +48,10 @@ public abstract class DateFormatter implements Formatter<Long> {
|
|||||||
|
|
||||||
protected String format(long epochMs, String format) {
|
protected String format(long epochMs, String format) {
|
||||||
boolean useServerTime = config.isTrue(TimeSettings.USE_SERVER_TIME);
|
boolean useServerTime = config.isTrue(TimeSettings.USE_SERVER_TIME);
|
||||||
String locale = config.getString(PluginSettings.LOCALE);
|
String localeSetting = config.getString(PluginSettings.LOCALE);
|
||||||
java.util.Locale usedLocale = locale.equalsIgnoreCase("default")
|
java.util.Locale usedLocale = localeSetting.equalsIgnoreCase("default")
|
||||||
? java.util.Locale.ENGLISH
|
? java.util.Locale.ENGLISH
|
||||||
: java.util.Locale.forLanguageTag(locale);
|
: java.util.Locale.forLanguageTag(localeSetting);
|
||||||
SimpleDateFormat dateFormat = new SimpleDateFormat(format, usedLocale);
|
SimpleDateFormat dateFormat = new SimpleDateFormat(format, usedLocale);
|
||||||
TimeZone timeZone = useServerTime ? TimeZone.getDefault() : TimeZone.getTimeZone("GMT");
|
TimeZone timeZone = useServerTime ? TimeZone.getDefault() : TimeZone.getTimeZone("GMT");
|
||||||
dateFormat.setTimeZone(timeZone);
|
dateFormat.setTimeZone(timeZone);
|
||||||
|
Loading…
Reference in New Issue
Block a user