diff --git a/galaxy/src/main/java/com/alttd/chat/ChatPlugin.java b/galaxy/src/main/java/com/alttd/chat/ChatPlugin.java index 9122a63..bbb4754 100755 --- a/galaxy/src/main/java/com/alttd/chat/ChatPlugin.java +++ b/galaxy/src/main/java/com/alttd/chat/ChatPlugin.java @@ -13,6 +13,7 @@ import com.alttd.chat.nicknames.Nicknames; import com.alttd.chat.nicknames.NicknamesEvents; import com.alttd.chat.objects.channels.Channel; import com.alttd.chat.objects.channels.CustomChannel; +import com.alttd.chat.requests.RequestHandler; import com.alttd.chat.util.ALogger; import com.alttd.chat.util.Utility; import org.bukkit.Bukkit; @@ -29,6 +30,7 @@ public class ChatPlugin extends JavaPlugin { private ChatAPI chatAPI; private ChatHandler chatHandler; + private RequestHandler requestHandler; private String messageChannel; private ServerConfig serverConfig; @@ -40,6 +42,8 @@ public class ChatPlugin extends JavaPlugin { chatAPI = new ChatImplementation(); chatHandler = new ChatHandler(); DatabaseConnection.initialize(); + requestHandler = new RequestHandler(); + requestHandler.loadRequests(); serverConfig = new ServerConfig(Bukkit.getServerName()); registerListener(new PlayerListener(serverConfig), new ChatListener(), new BookListener()); if(serverConfig.GLOBALCHAT) { @@ -105,6 +109,10 @@ public class ChatPlugin extends JavaPlugin { return chatHandler; } + public RequestHandler getRequestHandler() { + return requestHandler; + } + public boolean serverGlobalChatEnabled() { return serverConfig.GLOBALCHAT; } diff --git a/galaxy/src/main/java/com/alttd/chat/requests/NickNameRequest.java b/galaxy/src/main/java/com/alttd/chat/requests/NickNameRequest.java index a55c590..7203d73 100644 --- a/galaxy/src/main/java/com/alttd/chat/requests/NickNameRequest.java +++ b/galaxy/src/main/java/com/alttd/chat/requests/NickNameRequest.java @@ -10,6 +10,11 @@ public class NickNameRequest extends Request { this.requestType = RequestType.NICKNAME; } + public NickNameRequest(UUID requester, String request, boolean completed, UUID completedBy, long dateRequested, long dateCompleted) { + super(requester, request, completed, completedBy, dateRequested, dateCompleted); + + this.requestType = RequestType.NICKNAME; + } @Override public boolean processRequest(UUID processor) { return false; diff --git a/galaxy/src/main/java/com/alttd/chat/requests/PrefixRequest.java b/galaxy/src/main/java/com/alttd/chat/requests/PrefixRequest.java index ea9fc04..4d3640f 100644 --- a/galaxy/src/main/java/com/alttd/chat/requests/PrefixRequest.java +++ b/galaxy/src/main/java/com/alttd/chat/requests/PrefixRequest.java @@ -10,6 +10,12 @@ public class PrefixRequest extends Request{ this.requestType = RequestType.PREFIX; } + public PrefixRequest(UUID requester, String request, boolean completed, UUID completedBy, long dateRequested, long dateCompleted) { + super(requester, request, completed, completedBy, dateRequested, dateCompleted); + + this.requestType = RequestType.NICKNAME; + } + @Override public boolean processRequest(UUID processor) { return false; diff --git a/galaxy/src/main/java/com/alttd/chat/requests/Request.java b/galaxy/src/main/java/com/alttd/chat/requests/Request.java index 39ddeeb..9206dfa 100644 --- a/galaxy/src/main/java/com/alttd/chat/requests/Request.java +++ b/galaxy/src/main/java/com/alttd/chat/requests/Request.java @@ -2,6 +2,7 @@ package com.alttd.chat.requests; import org.bukkit.Bukkit; +import java.util.Date; import java.util.UUID; public abstract class Request { @@ -11,12 +12,25 @@ public abstract class Request { protected String serverName; protected String request; protected boolean completed; - protected boolean acceptedBy; + protected UUID completedBy; + protected long dateRequested; + protected long dateCompleted; Request(UUID requester, String request) { this.requester = requester; this.request = request; this.serverName = Bukkit.getServerName(); + this.dateRequested = new Date().getTime(); + saveRequest(); + } + + Request(UUID requester, String request, boolean completed, UUID completedBy, long dateRequested, long dateCompleted) { + this.requester = requester; + this.request = request; + this.completed = completed; + this.completedBy = completedBy; + this.dateRequested = dateRequested; + this.dateCompleted = dateCompleted; } public static Request of(UUID requester, RequestType requestType, String request) { @@ -26,10 +40,30 @@ public abstract class Request { }; } - public abstract boolean processRequest(UUID processor); + public static Request load(UUID requester, RequestType requestType, String request, boolean completed, UUID completedBy, long dateRequested, long dateCompleted) { + return switch (requestType) { + case PREFIX -> new PrefixRequest(requester, request, completed, completedBy, dateRequested, dateCompleted); + case NICKNAME -> new NickNameRequest(requester, request, completed, completedBy, dateRequested, dateCompleted); + }; + } + + public boolean processRequest(UUID completedBy) { + completeRequest(completedBy); + return true; + } public boolean isCompleted() { return completed; } + void completeRequest(UUID completedBy) { + this.completed = true; + this.completedBy = completedBy; + this.dateCompleted = new Date().getTime(); + saveRequest(); + } + + public void saveRequest() { + // upsert into database + } } diff --git a/galaxy/src/main/java/com/alttd/chat/requests/RequestHandler.java b/galaxy/src/main/java/com/alttd/chat/requests/RequestHandler.java index 5647465..68aaae0 100644 --- a/galaxy/src/main/java/com/alttd/chat/requests/RequestHandler.java +++ b/galaxy/src/main/java/com/alttd/chat/requests/RequestHandler.java @@ -1,25 +1,61 @@ package com.alttd.chat.requests; -import java.util.*; +import com.alttd.chat.config.Config; +import com.alttd.chat.database.DatabaseConnection; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.UUID; public class RequestHandler { - private final HashMap requests; + private final List requests; public RequestHandler() { - requests = new HashMap<>(); + requests = new ArrayList<>(); } - public void addRequest(Request request) { - requests.putIfAbsent(request.requester, request); + public boolean addRequest(Request request) { + return requests.add(request); } - public void removeRequest(Request request) { - requests.remove(request.requester); + public boolean removeRequest(Request request) { + return requests.remove(request); } - public HashMap getRequests() { + public List getRequests() { return requests; } + public void loadRequests() { + long time = new Date().getTime() - Config.NICK_WAIT_TIME; + // Load all requests that have not been completed yet + String query = "SELECT * FROM requests WHERE completed=false and (datechanged = 0 or datechanged > " + time + ")"; + + try { + Connection connection = DatabaseConnection.getConnection(); + ResultSet resultSet = connection.prepareStatement(query).executeQuery(); + + while (resultSet.next()) { + UUID requester = UUID.fromString(resultSet.getString("requester")); + RequestType requestType = RequestType.valueOf(resultSet.getString("requesttype")); + String requestString = resultSet.getString("request"); + boolean completed = resultSet.getBoolean("completed"); + UUID completedby = UUID.fromString(resultSet.getString("completedby")); + long dateRequested = resultSet.getLong("daterequested"); + long dateCompleted = resultSet.getLong("datecompleted"); + + Request request = Request.load(requester, requestType, requestString, completed, completedby, dateRequested, dateCompleted); + addRequest(request); + } + + } catch (SQLException exception) { + exception.printStackTrace(); + } + } + }