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:
Rsl1122 2018-12-14 17:27:27 +02:00
parent 05fc528e51
commit 09f51ee087
7 changed files with 66 additions and 54 deletions

View File

@ -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.processing.ExecStatement;
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.ServerTable;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
@ -53,7 +55,7 @@ public class NicknameLastSeenPatch extends Patch {
db.executeUnsafe("CREATE TABLE IF NOT EXISTS plan_actions " +
"(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<>();
for (Map.Entry<Integer, UUID> entry : serverUUIDsByID.entrySet()) {
serverIDsByUUID.put(entry.getValue(), entry.getKey());
@ -65,6 +67,24 @@ public class NicknameLastSeenPatch extends Patch {
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) {
String fetchSQL = "SELECT * FROM plan_actions WHERE action_id=3 ORDER BY date DESC";
return query(new QueryAllStatement<Map<Integer, Set<Nickname>>>(fetchSQL, 10000) {

View File

@ -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.
*

View File

@ -48,12 +48,10 @@ public class UserInfoTable extends UserUUIDTable {
private final String insertStatement;
private final ServerTable serverTable;
private final UsersTable usersTable;
public UserInfoTable(SQLDB db) {
super(TABLE_NAME, db);
serverTable = db.getServerTable();
usersTable = db.getUsersTable();
insertStatement = "INSERT INTO " + tableName + " (" +
Col.UUID + ", " +

View File

@ -29,7 +29,6 @@ import java.util.function.Predicate;
public abstract class Setting<T> {
protected final String path;
private final Type<T> type;
private final Predicate<T> validator;
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) {
this.path = path;
this.type = type;
this.validator = validator;
}

View File

@ -75,7 +75,7 @@ public class RawDataResponse extends Response {
private List handleList(List list) {
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;
}

View File

@ -55,7 +55,7 @@ public class FileWatcher extends Thread {
this.running = false;
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();
}
@ -69,31 +69,7 @@ public class FileWatcher extends Thread {
this.running = true;
try (WatchService watcher = FileSystems.getDefault().newWatchService()) {
watchedPath.register(watcher, ENTRY_MODIFY);
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;
}
}
}
runLoop(watcher);
} catch (IOException e) {
errorHandler.log(L.ERROR, this.getClass(), 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
public void interrupt() {
running = false;

View File

@ -48,10 +48,10 @@ public abstract class DateFormatter implements Formatter<Long> {
protected String format(long epochMs, String format) {
boolean useServerTime = config.isTrue(TimeSettings.USE_SERVER_TIME);
String locale = config.getString(PluginSettings.LOCALE);
java.util.Locale usedLocale = locale.equalsIgnoreCase("default")
String localeSetting = config.getString(PluginSettings.LOCALE);
java.util.Locale usedLocale = localeSetting.equalsIgnoreCase("default")
? java.util.Locale.ENGLISH
: java.util.Locale.forLanguageTag(locale);
: java.util.Locale.forLanguageTag(localeSetting);
SimpleDateFormat dateFormat = new SimpleDateFormat(format, usedLocale);
TimeZone timeZone = useServerTime ? TimeZone.getDefault() : TimeZone.getTimeZone("GMT");
dateFormat.setTimeZone(timeZone);