summaryrefslogtreecommitdiff
path: root/api/src/main/java/mancala
diff options
context:
space:
mode:
authorMarco de Wild <mdwild@sogyo.nl>2021-01-14 14:42:57 +0100
committerMarco de Wild <mdwild@sogyo.nl>2021-01-14 14:42:57 +0100
commitf08b1441134aff874a18b48814fc50fcbf314e7f (patch)
tree676941da8a2b6927549d2159925d7c4c95ed96b1 /api/src/main/java/mancala
parent3befa777192df0b2cabb75ccdbcd66bc1878b562 (diff)
Added a stub for the API
Diffstat (limited to 'api/src/main/java/mancala')
-rw-r--r--api/src/main/java/mancala/App.java48
-rw-r--r--api/src/main/java/mancala/api/StartMancala.java32
-rw-r--r--api/src/main/java/mancala/api/models/GameStatus.java24
-rw-r--r--api/src/main/java/mancala/api/models/Mancala.java21
-rw-r--r--api/src/main/java/mancala/api/models/Pit.java18
-rw-r--r--api/src/main/java/mancala/api/models/Player.java28
-rw-r--r--api/src/main/java/mancala/api/models/PlayerInput.java23
7 files changed, 194 insertions, 0 deletions
diff --git a/api/src/main/java/mancala/App.java b/api/src/main/java/mancala/App.java
new file mode 100644
index 0000000..062e8e1
--- /dev/null
+++ b/api/src/main/java/mancala/App.java
@@ -0,0 +1,48 @@
+package mancala;
+
+import org.eclipse.jetty.server.Handler;
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.handler.*;
+import org.eclipse.jetty.webapp.*;
+import org.eclipse.jetty.servlet.ServletHandler;
+import org.eclipse.jetty.servlet.ServletContextHandler;
+import org.eclipse.jetty.servlet.ServletHolder;
+import org.glassfish.jersey.servlet.ServletContainer;
+
+import mancala.api.*;
+
+public class App {
+ public static void main(String[] args) throws Exception {
+ Server server = startServer(8080);
+ ServletContextHandler context = createStatefulContext(server);
+ registerServlets(context);
+
+ server.start();
+ System.out.println("Started server.");
+ System.out.println("Listening on http://localhost:8080/");
+ System.out.println("Press CTRL+C to exit.");
+ server.join();
+ }
+
+ private static Server startServer(int port) {
+ return new Server(8080);
+ }
+
+ private static ServletContextHandler createStatefulContext(Server server) {
+ ServletContextHandler context =
+ new ServletContextHandler(ServletContextHandler.SESSIONS);
+ context.setContextPath("/");
+ server.setHandler(context);
+ }
+
+ private static void registerServlets(ServletContextHandler context) {
+ // Use the Jersey framework to translate the classes in the
+ // mancala.api package to server endpoints (servlets).
+ // For example, the StartMancala class will become an endpoint at
+ // http://localost:8080/start
+ ServletHolder serverHolder = context.addServlet(ServletContainer.class, "/mancala/api/*");
+ serverHolder.setInitOrder(1);
+ serverHolder.setInitParameter("jersey.config.server.provider.packages",
+ "mancala.api");
+ }
+}
diff --git a/api/src/main/java/mancala/api/StartMancala.java b/api/src/main/java/mancala/api/StartMancala.java
new file mode 100644
index 0000000..7bd2330
--- /dev/null
+++ b/api/src/main/java/mancala/api/StartMancala.java
@@ -0,0 +1,32 @@
+package mancala.api;
+
+import java.io.IOException;
+import jakarta.servlet.http.*;
+import jakarta.servlet.ServletException;
+import jakarta.ws.rs.*;
+import jakarta.ws.rs.core.*;
+
+import mancala.api.models.*;
+import mancala.domain.MancalaImpl;
+
+@Path("/start")
+public class StartMancala {
+ @POST
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response initialize(
+ @Context HttpServletRequest request,
+ PlayerInput players) {
+ var mancala = new MancalaImpl();
+ String namePlayer1 = players.getNameplayer1();
+ String namePlayer2 = players.getNameplayer2();
+
+ HttpSession session = request.getSession(true);
+ session.setAttribute("mancala", mancala);
+ session.setAttribute("player1", namePlayer1);
+ session.setAttribute("player2", namePlayer2);
+
+ var output = new Mancala(mancala, namePlayer1, namePlayer2);
+ return Response.status(200).entity(output).build();
+ }
+}
diff --git a/api/src/main/java/mancala/api/models/GameStatus.java b/api/src/main/java/mancala/api/models/GameStatus.java
new file mode 100644
index 0000000..a90269c
--- /dev/null
+++ b/api/src/main/java/mancala/api/models/GameStatus.java
@@ -0,0 +1,24 @@
+package mancala.api.models;
+
+public class GameStatus {
+ boolean endOfGame;
+ public boolean getEndOfGame() { return endOfGame; }
+
+ String winner;
+ public String getWinner() { return winner; }
+
+ public GameStatus(mancala.domain.Mancala mancala,
+ String namePlayer1, String namePlayer2) {
+ this.endOfGame = mancala.isEndOfGame();
+ int winner = mancala.getWinner();
+ if(winner == mancala.NO_PLAYERS) {
+ this.winner = null;
+ } else if(winner == mancala.PLAYER_ONE) {
+ this.winner = namePlayer1;
+ } else if(winner == mancala.PLAYER_TWO) {
+ this.winner = namePlayer2;
+ } else {
+ this.winner = namePlayer1 + "and" + namePlayer2;
+ }
+ }
+} \ No newline at end of file
diff --git a/api/src/main/java/mancala/api/models/Mancala.java b/api/src/main/java/mancala/api/models/Mancala.java
new file mode 100644
index 0000000..bb747c5
--- /dev/null
+++ b/api/src/main/java/mancala/api/models/Mancala.java
@@ -0,0 +1,21 @@
+package mancala.api.models;
+
+// This package is a collection of DTO's (data transfer objects).
+// A DTO is a simple datastructure which models the
+// data your web API sends back to the client. The Java
+// objects will be converted to JSON objects.
+public class Mancala {
+ public Mancala(mancala.domain.Mancala mancala,
+ String namePlayer1, String namePlayer2) {
+ players = new Player[2];
+ players[0] = new Player(mancala, namePlayer1, true);
+ players[1] = new Player(mancala, namePlayer2, false);
+ gameStatus = new GameStatus(mancala, namePlayer1, namePlayer2);
+ }
+
+ Player[] players;
+ public Player[] getPlayers() { return players; }
+
+ GameStatus gameStatus;
+ public GameStatus getGameStatus() { return gameStatus; }
+} \ No newline at end of file
diff --git a/api/src/main/java/mancala/api/models/Pit.java b/api/src/main/java/mancala/api/models/Pit.java
new file mode 100644
index 0000000..457d19b
--- /dev/null
+++ b/api/src/main/java/mancala/api/models/Pit.java
@@ -0,0 +1,18 @@
+package mancala.api.models;
+
+public class Pit {
+ int index;
+
+ public int getIndex() {
+ return index;
+ }
+
+ int nrOfStones;
+
+ public int getNrOfStones() { return nrOfStones; }
+
+ public Pit(int index, int nrOfStones) {
+ this.index = index;
+ this.nrOfStones = nrOfStones;
+ }
+} \ No newline at end of file
diff --git a/api/src/main/java/mancala/api/models/Player.java b/api/src/main/java/mancala/api/models/Player.java
new file mode 100644
index 0000000..f987e82
--- /dev/null
+++ b/api/src/main/java/mancala/api/models/Player.java
@@ -0,0 +1,28 @@
+package mancala.api.models;
+
+public class Player {
+ public Player(mancala.domain.Mancala mancala,
+ String name, boolean isFirstPlayer) {
+ this.name = name;
+ type = isFirstPlayer ? "player1" : "player2";
+ hasTurn = mancala.isPlayersTurn(isFirstPlayer ?
+ mancala.PLAYER_ONE : mancala.PLAYER_TWO);
+ this.pits = new Pit[7];
+ var firstHole = isFirstPlayer ? 0 : 7;
+ for(int i = 0; i < 7; ++i) {
+ this.pits[i] = new Pit(i + firstHole, mancala.getStonesForPit(i + firstHole));
+ }
+ }
+
+ String name;
+ public String getName() { return name; }
+
+ String type;
+ public String getType() { return type; }
+
+ boolean hasTurn;
+ public boolean getHasTurn() { return hasTurn; }
+
+ Pit[] pits;
+ public Pit[] getPits() { return pits; }
+} \ No newline at end of file
diff --git a/api/src/main/java/mancala/api/models/PlayerInput.java b/api/src/main/java/mancala/api/models/PlayerInput.java
new file mode 100644
index 0000000..8fdbd2a
--- /dev/null
+++ b/api/src/main/java/mancala/api/models/PlayerInput.java
@@ -0,0 +1,23 @@
+package mancala.api.models;
+
+public class PlayerInput {
+
+ String nameplayer1;
+ String nameplayer2;
+
+ public String getNameplayer1() {
+ return nameplayer1;
+ }
+
+ public void setNameplayer1(String nameplayer1) {
+ this.nameplayer1 = nameplayer1;
+ }
+
+ public String getNameplayer2() {
+ return nameplayer2;
+ }
+
+ public void setNameplayer2(String nameplayer2) {
+ this.nameplayer2 = nameplayer2;
+ }
+} \ No newline at end of file