Skip to content

Commit 8bebf2d

Browse files
enhancement: adds CacheHandler
1 parent 9b06559 commit 8bebf2d

File tree

2 files changed

+48
-32
lines changed

2 files changed

+48
-32
lines changed

api/src/main/java/com/javadiscord/jdi/core/api/DiscordResponseParser.java

Lines changed: 7 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,24 @@
22

33
import com.fasterxml.jackson.core.JsonProcessingException;
44
import com.fasterxml.jackson.databind.ObjectMapper;
5+
import com.javadiscord.jdi.core.api.utils.CacheHandler;
56
import com.javadiscord.jdi.internal.api.DiscordRequest;
67
import com.javadiscord.jdi.internal.api.DiscordRequestDispatcher;
78
import com.javadiscord.jdi.internal.api.DiscordResponse;
89
import com.javadiscord.jdi.internal.api.DiscordResponseFuture;
910
import com.javadiscord.jdi.internal.cache.Cache;
1011

11-
import java.lang.reflect.Field;
1212
import java.util.List;
1313
import java.util.Map;
1414

1515
public class DiscordResponseParser {
1616
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
1717
private final DiscordRequestDispatcher dispatcher;
18-
private final Cache cache;
18+
private final CacheHandler cacheHandler;
1919

2020
public DiscordResponseParser(DiscordRequestDispatcher dispatcher, Cache cache) {
2121
this.dispatcher = dispatcher;
22-
this.cache = cache;
22+
this.cacheHandler = new CacheHandler(cache);
2323
}
2424

2525
public <T> AsyncResponse<List<T>> callAndParseList(Class<T> clazz, DiscordRequest request) {
@@ -31,10 +31,7 @@ public <T> AsyncResponse<List<T>> callAndParseList(Class<T> clazz, DiscordReques
3131
try {
3232
List<T> resultList = parseResponseFromList(clazz, response.body());
3333
asyncResponse.setResult(resultList);
34-
for (T result : resultList) {
35-
cacheResult(result);
36-
}
37-
} catch (NoSuchFieldException e) { // ignore
34+
cacheHandler.cacheResult(resultList);
3835
} catch (Exception e) {
3936
asyncResponse.setException(e);
4037
}
@@ -62,10 +59,7 @@ public <T> AsyncResponse<List<T>> callAndParseMap(String key, DiscordRequest req
6259
try {
6360
List<T> resultList = parseResponseFromMap(key, response.body());
6461
asyncResponse.setResult(resultList);
65-
for(T result : resultList) {
66-
cacheResult(result);
67-
}
68-
} catch (NoSuchFieldException e) { // ignore
62+
cacheHandler.cacheResult(resultList);
6963
} catch (Exception e){
7064
asyncResponse.setException(e);
7165
}
@@ -102,34 +96,15 @@ private <T> void success(
10296
try {
10397
T result = OBJECT_MAPPER.readValue(response.body(), type);
10498
asyncResponse.setResult(result);
105-
cacheResult(result);
106-
} catch(NoSuchFieldException e) { // ignore
107-
} catch (JsonProcessingException | IllegalAccessException e) {
99+
cacheHandler.cacheResult(result);
100+
} catch (JsonProcessingException e) {
108101
asyncResponse.setException(e);
109102
}
110103
} else {
111104
asyncResponse.setException(errorResponseException(response));
112105
}
113106
}
114107

115-
private <T> void cacheResult(T result) throws IllegalAccessException, NoSuchFieldException {
116-
Field guildIdField = result.getClass().getDeclaredField("guildId");
117-
Field idField = result.getClass().getDeclaredField("id");
118-
119-
long guildId = getLongFromField(guildIdField);
120-
long id = getLongFromField(idField);
121-
122-
cache.getCacheForGuild(guildId).add(id, result);
123-
}
124-
125-
private long getLongFromField(Field field) throws IllegalAccessException {
126-
field.setAccessible(true);
127-
if (field.getType() == String.class) {
128-
return Long.parseLong((String) field.get(field.getName()));
129-
}
130-
return (long) field.get(field.getName());
131-
}
132-
133108
private boolean isSuccessfulResponse(DiscordResponse response) {
134109
return response.status() >= 200 && response.status() < 300;
135110
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.javadiscord.jdi.core.api.utils;
2+
3+
import com.javadiscord.jdi.internal.cache.Cache;
4+
5+
import java.lang.reflect.Field;
6+
import java.util.List;
7+
8+
public class CacheHandler {
9+
10+
private final Cache cache;
11+
12+
public CacheHandler(Cache cache) {
13+
this.cache = cache;
14+
}
15+
16+
public <T> void cacheResult(T result) {
17+
try {
18+
Field guildIdField = result.getClass().getDeclaredField("guildId");
19+
Field idField = result.getClass().getDeclaredField("id");
20+
21+
long guildId = getLongFromField(guildIdField);
22+
long id = getLongFromField(idField);
23+
24+
cache.getCacheForGuild(guildId).add(id, result);
25+
} catch (IllegalAccessException | NoSuchFieldException e) {
26+
// NoSuchFieldException means we don't want to cache result
27+
}
28+
}
29+
30+
public <T> void cacheResult(List<T> resultList) {
31+
resultList.forEach(this::cacheResult);
32+
}
33+
34+
private long getLongFromField(Field field) throws IllegalAccessException {
35+
field.setAccessible(true);
36+
if (field.getType() == String.class) {
37+
return Long.parseLong((String) field.get(field.getName()));
38+
}
39+
return (long) field.get(field.getName());
40+
}
41+
}

0 commit comments

Comments
 (0)