mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2024-12-21 05:50:18 +08:00
Made DataContainer non Serializable, getValue instead of getUnsafe in UsersTable - both attempt to fix #673 - 1
This commit is contained in:
parent
886de6fe4d
commit
91aa730673
@ -6,6 +6,7 @@ import com.djrapitops.plan.data.store.mutators.formatting.Formatter;
|
||||
import com.djrapitops.plugin.api.TimeAmount;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
@ -17,16 +18,18 @@ import java.util.function.Supplier;
|
||||
*
|
||||
* @author Rsl1122
|
||||
*/
|
||||
public class DataContainer extends HashMap<Key, Supplier> {
|
||||
public class DataContainer {
|
||||
|
||||
private final Map<Key, Supplier> map;
|
||||
private long timeToLive;
|
||||
|
||||
public DataContainer() {
|
||||
timeToLive = TimeAmount.SECOND.ms() * 30L;
|
||||
this(TimeAmount.SECOND.ms() * 30L);
|
||||
}
|
||||
|
||||
public DataContainer(long timeToLive) {
|
||||
this.timeToLive = timeToLive;
|
||||
map = new HashMap<>();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -44,11 +47,11 @@ public class DataContainer extends HashMap<Key, Supplier> {
|
||||
if (supplier == null) {
|
||||
return;
|
||||
}
|
||||
super.put(key, new CachingSupplier<>(supplier, timeToLive));
|
||||
map.put(key, new CachingSupplier<>(supplier, timeToLive));
|
||||
}
|
||||
|
||||
public <T> Supplier<T> getSupplier(Key<T> key) {
|
||||
return (Supplier<T>) super.get(key);
|
||||
return (Supplier<T>) map.get(key);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -59,7 +62,7 @@ public class DataContainer extends HashMap<Key, Supplier> {
|
||||
* @return true if found, false if not.
|
||||
*/
|
||||
public <T> boolean supports(Key<T> key) {
|
||||
return containsKey(key);
|
||||
return map.containsKey(key);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -87,7 +90,7 @@ public class DataContainer extends HashMap<Key, Supplier> {
|
||||
}
|
||||
|
||||
public <T> T getUnsafe(Key<T> key) {
|
||||
Supplier supplier = super.get(key);
|
||||
Supplier supplier = map.get(key);
|
||||
if (supplier == null) {
|
||||
throw new IllegalArgumentException("Unsupported Key: " + key.getKeyName());
|
||||
}
|
||||
@ -104,30 +107,15 @@ public class DataContainer extends HashMap<Key, Supplier> {
|
||||
return formatter.apply(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Normal put method.
|
||||
*
|
||||
* @param key Key.
|
||||
* @param value Supplier
|
||||
* @return the previous value.
|
||||
* @deprecated Use putSupplier instead for type safety.
|
||||
*/
|
||||
@Override
|
||||
@Deprecated
|
||||
public Supplier put(Key key, Supplier value) {
|
||||
return super.put(key, value);
|
||||
public void putAll(Map<Key, Supplier> toPut) {
|
||||
map.putAll(toPut);
|
||||
}
|
||||
|
||||
/**
|
||||
* Normal get method.
|
||||
*
|
||||
* @param key Key.
|
||||
* @return Supplier
|
||||
* @deprecated Use getSupplier instead for types.
|
||||
*/
|
||||
@Override
|
||||
@Deprecated
|
||||
public Supplier get(Object key) {
|
||||
return super.get(key);
|
||||
public void putAll(DataContainer dataContainer) {
|
||||
putAll(dataContainer.map);
|
||||
}
|
||||
|
||||
public void clear() {
|
||||
map.clear();
|
||||
}
|
||||
}
|
@ -16,7 +16,6 @@ import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.*;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
/**
|
||||
* Table that is in charge of storing common player data for all servers.
|
||||
@ -402,45 +401,45 @@ public class UsersTable extends UserIDTable {
|
||||
}
|
||||
|
||||
public DataContainer getUserInformation(UUID uuid) {
|
||||
Key<DataContainer> key = new Key<>(DataContainer.class, "plan_users_data");
|
||||
Key<DataContainer> user_data = new Key<>(DataContainer.class, "plan_users_data");
|
||||
DataContainer returnValue = new DataContainer();
|
||||
|
||||
Supplier<DataContainer> usersTableResults = () -> {
|
||||
String sql = "SELECT * FROM " + tableName + " WHERE " + Col.UUID + "=?";
|
||||
|
||||
return query(new QueryStatement<DataContainer>(sql) {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
statement.setString(1, uuid.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public DataContainer processResults(ResultSet set) throws SQLException {
|
||||
DataContainer container = new DataContainer();
|
||||
|
||||
if (set.next()) {
|
||||
long registered = set.getLong(Col.REGISTERED.get());
|
||||
String name = set.getString(Col.USER_NAME.get());
|
||||
int timesKicked = set.getInt(Col.TIMES_KICKED.get());
|
||||
|
||||
container.putRawData(PlayerKeys.REGISTERED, registered);
|
||||
container.putRawData(PlayerKeys.NAME, name);
|
||||
container.putRawData(PlayerKeys.KICK_COUNT, timesKicked);
|
||||
}
|
||||
|
||||
return container;
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
returnValue.putSupplier(key, usersTableResults);
|
||||
returnValue.putSupplier(user_data, () -> getUserInformationDataContainer(uuid));
|
||||
returnValue.putRawData(PlayerKeys.UUID, uuid);
|
||||
returnValue.putSupplier(PlayerKeys.REGISTERED, () -> returnValue.getUnsafe(key).getUnsafe(PlayerKeys.REGISTERED));
|
||||
returnValue.putSupplier(PlayerKeys.NAME, () -> returnValue.getUnsafe(key).getUnsafe(PlayerKeys.NAME));
|
||||
returnValue.putSupplier(PlayerKeys.KICK_COUNT, () -> returnValue.getUnsafe(key).getUnsafe(PlayerKeys.KICK_COUNT));
|
||||
returnValue.putSupplier(PlayerKeys.REGISTERED, () -> returnValue.getUnsafe(user_data).getValue(PlayerKeys.REGISTERED).orElse(null));
|
||||
returnValue.putSupplier(PlayerKeys.NAME, () -> returnValue.getUnsafe(user_data).getValue(PlayerKeys.NAME).orElse(null));
|
||||
returnValue.putSupplier(PlayerKeys.KICK_COUNT, () -> returnValue.getUnsafe(user_data).getValue(PlayerKeys.KICK_COUNT).orElse(null));
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
private DataContainer getUserInformationDataContainer(UUID uuid) {
|
||||
String sql = "SELECT * FROM " + tableName + " WHERE " + Col.UUID + "=?";
|
||||
|
||||
return query(new QueryStatement<DataContainer>(sql) {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
statement.setString(1, uuid.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public DataContainer processResults(ResultSet set) throws SQLException {
|
||||
DataContainer container = new DataContainer();
|
||||
|
||||
if (set.next()) {
|
||||
long registered = set.getLong(Col.REGISTERED.get());
|
||||
String name = set.getString(Col.USER_NAME.get());
|
||||
int timesKicked = set.getInt(Col.TIMES_KICKED.get());
|
||||
|
||||
container.putRawData(PlayerKeys.REGISTERED, registered);
|
||||
container.putRawData(PlayerKeys.NAME, name);
|
||||
container.putRawData(PlayerKeys.KICK_COUNT, timesKicked);
|
||||
}
|
||||
|
||||
return container;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public enum Col implements Column {
|
||||
ID("id"),
|
||||
UUID("uuid"),
|
||||
|
Loading…
Reference in New Issue
Block a user