Skip to content

Commit 233ca06

Browse files
committed
Started adding a new API system, as a way to see what the bot has been doing...
Useful for debugging purposes...
1 parent ed66211 commit 233ca06

File tree

12 files changed

+187
-4
lines changed

12 files changed

+187
-4
lines changed

src/main/java/module-info.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,14 @@
66
requires com.google.gson;
77
requires org.eclipse.jetty.servlet;
88
requires org.jetbrains.annotations;
9+
requires net.minecraftforge.eventbus;
10+
requires net.dv8tion.jda;
911

1012
exports org.mangorage.mangobotsite;
1113
exports org.mangorage.mangobotsite.website.file;
14+
exports org.mangorage.mangobotsite.website.servlet.entity;
15+
16+
1217

1318
exports org.mangorage.mangobotsite.website.filters to org.eclipse.jetty.server;
1419
exports org.mangorage.mangobotsite.website.servlet to org.eclipse.jetty.server;
@@ -17,7 +22,12 @@
1722
exports org.mangorage.mangobotsite.website.impl to freemarker;
1823
exports org.mangorage.mangobotsite.website.util to freemarker;
1924

20-
opens org.mangorage.mangobotsite.website.servlet to freemarker;
25+
exports org.mangorage.mangobotsite.website.servlet.entity.discord to com.google.gson;
26+
27+
28+
opens org.mangorage.mangobotsite.website.servlet to freemarker, com.google.gson;
29+
opens org.mangorage.mangobotsite.website.servlet.entity;
30+
2131

2232
provides org.mangorage.mangobotcore.plugin.api.Plugin with org.mangorage.mangobotsite.MangoBotSite;
2333
uses org.mangorage.mangobotcore.plugin.api.Plugin;

src/main/java/org/mangorage/mangobotsite/MangoBotSite.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
package org.mangorage.mangobotsite;
22

3-
43
import org.mangorage.mangobotcore.plugin.api.MangoBotPlugin;
54
import org.mangorage.mangobotcore.plugin.api.Plugin;
65
import org.mangorage.mangobotcore.plugin.api.PluginManager;
76
import org.mangorage.mangobotplugin.entrypoint.MangoBot;
87
import org.mangorage.mangobotsite.website.WebServer;
98
import org.mangorage.mangobotsite.website.file.FileUploadManager;
109
import org.mangorage.mangobotsite.website.impl.ObjectMap;
10+
import org.mangorage.mangobotsite.website.servlet.entity.EntityManager;
1111
import org.mangorage.mangobotsite.website.util.WebConstants;
1212

1313
import java.nio.file.Path;
@@ -17,6 +17,7 @@ public final class MangoBotSite implements Plugin {
1717
public static final String ID = "mangobotsite";
1818

1919
private final FileUploadManager fileUploadManager = new FileUploadManager(Path.of("webpage-root/uploads"));
20+
private final EntityManager entityManager = new EntityManager();
2021

2122
public MangoBotSite() {
2223

@@ -26,6 +27,9 @@ public FileUploadManager getFileUploadManager() {
2627
return fileUploadManager;
2728
}
2829

30+
public EntityManager getEntityManager() {
31+
return entityManager;
32+
}
2933

3034
@Override
3135
public String getId() {
@@ -40,6 +44,7 @@ public void load() {
4044
objectMap.put("trickCommand", pl.getCommandManager().getCommand("trick"));
4145
objectMap.put("jda", pl.getJDA());
4246
objectMap.put(WebConstants.FILE_MANAGER, fileUploadManager);
47+
objectMap.put(WebConstants.ENTITY_MANAGER, getEntityManager());
4348

4449
WebServer.startWebServerSafely(objectMap);
4550
}

src/main/java/org/mangorage/mangobotsite/website/WebServer.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import org.mangorage.mangobotsite.website.impl.ObjectMap;
2222
import org.mangorage.mangobotsite.website.servlet.AccountServlet;
2323

24+
import org.mangorage.mangobotsite.website.servlet.EntitiesServlet;
25+
import org.mangorage.mangobotsite.website.servlet.EntityServlet;
2426
import org.mangorage.mangobotsite.website.servlet.FileServlet;
2527
import org.mangorage.mangobotsite.website.servlet.FileUploadServlet;
2628
import org.mangorage.mangobotsite.website.servlet.HomeServlet;
@@ -116,7 +118,7 @@ public static void startWebServer(ObjectMap objectMap) throws Exception {
116118
h.setErrorHandler(new DefaultErrorHandler());
117119
})
118120
.addServlet(DefaultServlet.class, "/*")
119-
.addServlet(HomeServlet.class, "/home")
121+
.addHttpServlet(HomeServlet.class, "/home")
120122
.addHttpServlet(InfoServlet.class, "/info")
121123
.addHttpServlet(TricksServlet.class, "/trick")
122124
.addHttpServlet(FileServlet.class, "/file")
@@ -128,6 +130,8 @@ public static void startWebServer(ObjectMap objectMap) throws Exception {
128130
new MultipartConfigElement("/tmp/uploads")
129131
);
130132
})
133+
.addHttpServlet(EntityServlet.class, "/api/entity/*")
134+
.addHttpServlet(EntitiesServlet.class, "/api/entities/*")
131135
.setAttribute(WebConstants.WEB_OBJECT_ID, objectMap)
132136
.addFilter(RequestInterceptorFilter.class, "/*", EnumSet.of(DispatcherType.REQUEST))
133137
.configureLoginBuilder(security -> {

src/main/java/org/mangorage/mangobotsite/website/impl/StandardHttpServlet.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import jakarta.servlet.http.HttpServlet;
77
import jakarta.servlet.http.HttpServletRequest;
88
import jakarta.servlet.http.HttpServletResponse;
9+
import org.mangorage.mangobotsite.website.util.WebConstants;
10+
911
import java.io.IOException;
1012

1113
public abstract class StandardHttpServlet extends HttpServlet {
@@ -36,6 +38,10 @@ public String getStyles() {
3638
return useDefaultStyles() ? "css/styles.css" : "css/%s.css".formatted(getServletInfo());
3739
}
3840

41+
public ObjectMap getObjectMap() {
42+
return (ObjectMap) getServletConfig().getServletContext().getAttribute(WebConstants.WEB_OBJECT_ID);
43+
}
44+
3945
@Override
4046
public String getServletInfo() {
4147
return getClass().getSimpleName();
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package org.mangorage.mangobotsite.website.servlet;
2+
3+
import com.google.gson.Gson;
4+
import com.google.gson.GsonBuilder;
5+
import jakarta.servlet.ServletException;
6+
import jakarta.servlet.http.HttpServletRequest;
7+
import jakarta.servlet.http.HttpServletResponse;
8+
import org.mangorage.mangobotsite.website.impl.StandardHttpServlet;
9+
import org.mangorage.mangobotsite.website.servlet.entity.EntityManager;
10+
import org.mangorage.mangobotsite.website.util.WebConstants;
11+
12+
import java.io.IOException;
13+
import java.util.ArrayList;
14+
15+
public final class EntitiesServlet extends StandardHttpServlet {
16+
private static final Gson GSON = new GsonBuilder()
17+
.setPrettyPrinting()
18+
.create();
19+
20+
public record Entity(String id, long age) {}
21+
22+
public record StandardList(ArrayList<Entity> entities) {}
23+
24+
@Override
25+
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
26+
final var entityId = req.getRequestURI().replaceFirst("/api/entities/", "");
27+
final var entityManager = getObjectMap().get(WebConstants.ENTITY_MANAGER, EntityManager.class);
28+
29+
final var list = entityManager.findAllByType(entityId)
30+
.stream()
31+
.map(e -> new Entity(e.getId(), e.getAge()))
32+
.toList();
33+
34+
if (list.isEmpty()) {
35+
resp.getWriter().write("No entities found!");
36+
} else {
37+
resp.getWriter().write(
38+
GSON.toJson(new StandardList(new ArrayList<>(list)))
39+
);
40+
}
41+
}
42+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package org.mangorage.mangobotsite.website.servlet;
2+
3+
import jakarta.servlet.ServletException;
4+
import jakarta.servlet.http.HttpServletRequest;
5+
import jakarta.servlet.http.HttpServletResponse;
6+
import org.mangorage.mangobotsite.website.impl.StandardHttpServlet;
7+
import org.mangorage.mangobotsite.website.servlet.entity.EntityManager;
8+
import org.mangorage.mangobotsite.website.util.WebConstants;
9+
10+
import java.io.IOException;
11+
12+
public class EntityServlet extends StandardHttpServlet {
13+
@Override
14+
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
15+
final var entityId = req.getRequestURI().replaceFirst("/api/entity/", "");
16+
final var entityManager = getObjectMap().get(WebConstants.ENTITY_MANAGER, EntityManager.class);
17+
18+
final var entity = entityManager.findEntity(entityId);
19+
if (entity.isPresent()) {
20+
resp.getWriter().write(entity.get().getJson());
21+
} else {
22+
resp.getWriter().write("Unable to find anything");
23+
}
24+
}
25+
}

src/main/java/org/mangorage/mangobotsite/website/servlet/TricksServlet.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ private static long getLong(String value) {
4141
@Override
4242
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
4343
// Retrieve shared objects from the servlet context
44-
var map = (ObjectMap) getServletConfig().getServletContext().getAttribute(WebConstants.WEB_OBJECT_ID);
44+
var map = getObjectMap();
4545
var command = map.get("trickCommand", TrickCommand.class);
4646
var jda = map.get("jda", JDA.class);
4747

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package org.mangorage.mangobotsite.website.servlet.entity;
2+
3+
import com.google.gson.Gson;
4+
import com.google.gson.GsonBuilder;
5+
6+
import java.util.UUID;
7+
8+
public record DeferredEntity(Object object, String type, UUID id, long age) implements IEntity {
9+
private static final Gson GSON = new GsonBuilder()
10+
.setPrettyPrinting()
11+
.create();
12+
13+
public DeferredEntity(Object object, String type) {
14+
this(object, type, UUID.randomUUID(), System.currentTimeMillis());
15+
}
16+
17+
@Override
18+
public long getAge() {
19+
return age();
20+
}
21+
22+
@Override
23+
public String getId() {
24+
return id().toString();
25+
}
26+
27+
@Override
28+
public String getType() {
29+
return "deferred";
30+
}
31+
32+
@Override
33+
public String getJson() {
34+
return GSON.toJson(object);
35+
}
36+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package org.mangorage.mangobotsite.website.servlet.entity;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
import java.util.Optional;
6+
7+
public final class EntityManager {
8+
private final List<IEntity> entities = new ArrayList<>();
9+
10+
public Optional<IEntity> findEntity(String id) {
11+
return entities.stream()
12+
.filter(entity -> entity.getId().equals(id))
13+
.findAny();
14+
}
15+
16+
public List<IEntity> findAllByType(String type) {
17+
return entities.stream()
18+
.filter(entity -> !entity.getType().equals(type))
19+
.toList();
20+
}
21+
22+
public void submitEntity(IEntity entity) {
23+
entities.add(entity);
24+
System.out.println(entity.getId() + " was submitted!");
25+
}
26+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package org.mangorage.mangobotsite.website.servlet.entity;
2+
3+
4+
/**
5+
* domain/api/entity/id
6+
* domain/api/entities/id
7+
*/
8+
public interface IEntity {
9+
long getAge();
10+
String getId();
11+
String getType();
12+
String getJson();
13+
}

0 commit comments

Comments
 (0)