mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2025-01-30 16:19:56 +08:00
This commit is contained in:
parent
8da9dc643b
commit
59b0452d47
@ -118,4 +118,8 @@ public class DataContainer {
|
|||||||
public void clear() {
|
public void clear() {
|
||||||
map.clear();
|
map.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Map<Key, Supplier> getMap() {
|
||||||
|
return map;
|
||||||
|
}
|
||||||
}
|
}
|
@ -19,6 +19,7 @@ import com.djrapitops.plan.system.webserver.response.cache.PageId;
|
|||||||
import com.djrapitops.plan.system.webserver.response.cache.ResponseCache;
|
import com.djrapitops.plan.system.webserver.response.cache.ResponseCache;
|
||||||
import com.djrapitops.plan.system.webserver.response.errors.NotFoundResponse;
|
import com.djrapitops.plan.system.webserver.response.errors.NotFoundResponse;
|
||||||
import com.djrapitops.plan.system.webserver.response.pages.InspectPageResponse;
|
import com.djrapitops.plan.system.webserver.response.pages.InspectPageResponse;
|
||||||
|
import com.djrapitops.plan.system.webserver.response.pages.RawPlayerDataResponse;
|
||||||
import com.djrapitops.plan.utilities.uuid.UUIDUtility;
|
import com.djrapitops.plan.utilities.uuid.UUIDUtility;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -41,17 +42,17 @@ public class PlayerPageHandler extends PageHandler {
|
|||||||
UUID uuid = UUIDUtility.getUUIDOf(playerName);
|
UUID uuid = UUIDUtility.getUUIDOf(playerName);
|
||||||
Locale locale = request.getLocale();
|
Locale locale = request.getLocale();
|
||||||
|
|
||||||
|
boolean raw = target.size() >= 2 && target.get(1).equalsIgnoreCase("raw");
|
||||||
|
|
||||||
if (uuid == null) {
|
if (uuid == null) {
|
||||||
return notFound(locale.getString(ErrorPageLang.UUID_404));
|
return notFound(locale.getString(ErrorPageLang.UUID_404));
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
if (Database.getActive().check().isPlayerRegistered(uuid)) {
|
if (Database.getActive().check().isPlayerRegistered(uuid)) {
|
||||||
Response response = ResponseCache.loadResponse(PageId.PLAYER.of(uuid));
|
if (raw) {
|
||||||
if (!(response instanceof InspectPageResponse)) {
|
return ResponseCache.loadResponse(PageId.RAW_PLAYER.of(uuid), () -> new RawPlayerDataResponse(uuid));
|
||||||
InfoSystem.getInstance().generateAndCachePlayerPage(uuid);
|
|
||||||
response = ResponseCache.loadResponse(PageId.PLAYER.of(uuid));
|
|
||||||
}
|
}
|
||||||
return response != null ? response : notFound(locale.getString(ErrorPageLang.NO_SERVERS_404));
|
return playerResponseOrNotFound(uuid, locale);
|
||||||
} else {
|
} else {
|
||||||
return notFound(locale.getString(ErrorPageLang.NOT_PLAYED_404));
|
return notFound(locale.getString(ErrorPageLang.NOT_PLAYED_404));
|
||||||
}
|
}
|
||||||
@ -61,6 +62,15 @@ public class PlayerPageHandler extends PageHandler {
|
|||||||
return InspectPageResponse.getRefreshing();
|
return InspectPageResponse.getRefreshing();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Response playerResponseOrNotFound(UUID uuid, Locale locale) throws WebException {
|
||||||
|
Response response = ResponseCache.loadResponse(PageId.PLAYER.of(uuid));
|
||||||
|
if (!(response instanceof InspectPageResponse)) {
|
||||||
|
InfoSystem.getInstance().generateAndCachePlayerPage(uuid);
|
||||||
|
response = ResponseCache.loadResponse(PageId.PLAYER.of(uuid));
|
||||||
|
}
|
||||||
|
return response != null ? response : notFound(locale.getString(ErrorPageLang.NO_SERVERS_404));
|
||||||
|
}
|
||||||
|
|
||||||
private Response notFound(String error) {
|
private Response notFound(String error) {
|
||||||
return ResponseCache.loadResponse(PageId.NOT_FOUND.of(error), () -> new NotFoundResponse(error));
|
return ResponseCache.loadResponse(PageId.NOT_FOUND.of(error), () -> new NotFoundResponse(error));
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,7 @@ import com.djrapitops.plan.system.webserver.response.Response;
|
|||||||
import com.djrapitops.plan.system.webserver.response.cache.PageId;
|
import com.djrapitops.plan.system.webserver.response.cache.PageId;
|
||||||
import com.djrapitops.plan.system.webserver.response.cache.ResponseCache;
|
import com.djrapitops.plan.system.webserver.response.cache.ResponseCache;
|
||||||
import com.djrapitops.plan.system.webserver.response.pages.AnalysisPageResponse;
|
import com.djrapitops.plan.system.webserver.response.pages.AnalysisPageResponse;
|
||||||
|
import com.djrapitops.plan.system.webserver.response.pages.RawServerDataResponse;
|
||||||
import com.djrapitops.plugin.api.Check;
|
import com.djrapitops.plugin.api.Check;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -31,6 +32,12 @@ public class ServerPageHandler extends PageHandler {
|
|||||||
@Override
|
@Override
|
||||||
public Response getResponse(Request request, List<String> target) {
|
public Response getResponse(Request request, List<String> target) {
|
||||||
UUID serverUUID = getServerUUID(target);
|
UUID serverUUID = getServerUUID(target);
|
||||||
|
|
||||||
|
boolean raw = target.size() >= 2 && target.get(1).equalsIgnoreCase("raw");
|
||||||
|
if (raw) {
|
||||||
|
return ResponseCache.loadResponse(PageId.RAW_SERVER.of(serverUUID), () -> new RawServerDataResponse(serverUUID));
|
||||||
|
}
|
||||||
|
|
||||||
Response response = ResponseCache.loadResponse(PageId.SERVER.of(serverUUID));
|
Response response = ResponseCache.loadResponse(PageId.SERVER.of(serverUUID));
|
||||||
|
|
||||||
if (response != null) {
|
if (response != null) {
|
||||||
|
@ -14,7 +14,9 @@ import java.util.UUID;
|
|||||||
public enum PageId {
|
public enum PageId {
|
||||||
|
|
||||||
SERVER("serverPage:"),
|
SERVER("serverPage:"),
|
||||||
|
RAW_SERVER("rawServer:"),
|
||||||
PLAYER("playerPage:"),
|
PLAYER("playerPage:"),
|
||||||
|
RAW_PLAYER("rawPlayer:"),
|
||||||
PLAYERS("playersPage"),
|
PLAYERS("playersPage"),
|
||||||
|
|
||||||
ERROR("error:"),
|
ERROR("error:"),
|
||||||
|
@ -0,0 +1,71 @@
|
|||||||
|
package com.djrapitops.plan.system.webserver.response.pages;
|
||||||
|
|
||||||
|
import com.djrapitops.plan.data.store.containers.DataContainer;
|
||||||
|
import com.djrapitops.plan.system.webserver.response.Response;
|
||||||
|
import com.djrapitops.plan.system.webserver.response.ResponseType;
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Response for sending raw data as JSON when it is inside a DataContainer.
|
||||||
|
* <p>
|
||||||
|
* This transform class is required to remove Key-Supplier object pollution in the resulting JSON, as well as to remove
|
||||||
|
* the effects of the caching layer.
|
||||||
|
*
|
||||||
|
* @author Rsl1122
|
||||||
|
*/
|
||||||
|
public class RawDataResponse extends Response {
|
||||||
|
|
||||||
|
public RawDataResponse(DataContainer dataContainer) {
|
||||||
|
super(ResponseType.JSON);
|
||||||
|
|
||||||
|
Map<String, Object> values = mapToNormalMap(dataContainer);
|
||||||
|
|
||||||
|
super.setHeader("HTTP/1.1 200 OK");
|
||||||
|
|
||||||
|
Gson gson = new Gson();
|
||||||
|
super.setContent(gson.toJson(values));
|
||||||
|
}
|
||||||
|
|
||||||
|
private Map<String, Object> mapToNormalMap(DataContainer player) {
|
||||||
|
Map<String, Object> values = new HashMap<>();
|
||||||
|
player.getMap().forEach((key, value) ->
|
||||||
|
{
|
||||||
|
Object object = value.get();
|
||||||
|
if (object instanceof DataContainer) {
|
||||||
|
object = mapToNormalMap((DataContainer) object);
|
||||||
|
}
|
||||||
|
if (object instanceof Map) {
|
||||||
|
object = handleMap((Map) object);
|
||||||
|
}
|
||||||
|
if (object instanceof List) {
|
||||||
|
object = handleList((List) object);
|
||||||
|
}
|
||||||
|
values.put(key.getKeyName(), object);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
return values;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List handleList(List object) {
|
||||||
|
List<Object> list = object;
|
||||||
|
if (list.stream().findAny().orElse(null) instanceof DataContainer) {
|
||||||
|
return list.stream().map((obj) -> mapToNormalMap((DataContainer) obj)).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Map handleMap(Map object) {
|
||||||
|
Map<Object, Object> map = object;
|
||||||
|
if (map.values().stream().findAny().orElse(null) instanceof DataContainer) {
|
||||||
|
Map<Object, Object> newMap = new HashMap<>();
|
||||||
|
map.forEach((key, value) -> newMap.put(key, mapToNormalMap((DataContainer) value)));
|
||||||
|
return newMap;
|
||||||
|
}
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
package com.djrapitops.plan.system.webserver.response.pages;
|
||||||
|
|
||||||
|
import com.djrapitops.plan.system.cache.CacheSystem;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Raw Data JSON response for a Player.
|
||||||
|
*
|
||||||
|
* @author Rsl1122
|
||||||
|
*/
|
||||||
|
public class RawPlayerDataResponse extends RawDataResponse {
|
||||||
|
|
||||||
|
public RawPlayerDataResponse(UUID uuid) {
|
||||||
|
super(CacheSystem.getInstance().getDataContainerCache().getPlayerContainer(uuid));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
package com.djrapitops.plan.system.webserver.response.pages;
|
||||||
|
|
||||||
|
import com.djrapitops.plan.system.cache.CacheSystem;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Raw Data JSON response for a Server.
|
||||||
|
*
|
||||||
|
* @author Rsl1122
|
||||||
|
*/
|
||||||
|
public class RawServerDataResponse extends RawDataResponse {
|
||||||
|
|
||||||
|
public RawServerDataResponse(UUID serverUUID) {
|
||||||
|
super(CacheSystem.getInstance().getDataContainerCache().getAnalysisContainer(serverUUID).getServerContainer());
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user