From dc2b29c9bbf58d704b4913ca22d24b0958038b32 Mon Sep 17 00:00:00 2001 From: Peter Verhas Date: Sun, 9 Oct 2016 18:39:19 +0200 Subject: [PATCH 1/2] NO session CODE --- .../mastermind/servlet/GameSessionSaver.java | 45 ------------------- .../example/mastermind/servlet/HtmlTools.java | 24 ++++------ .../mastermind/servlet/MastermindHandler.java | 35 ++------------- 3 files changed, 13 insertions(+), 91 deletions(-) delete mode 100644 src/main/java/packt/java9/by/example/mastermind/servlet/GameSessionSaver.java diff --git a/src/main/java/packt/java9/by/example/mastermind/servlet/GameSessionSaver.java b/src/main/java/packt/java9/by/example/mastermind/servlet/GameSessionSaver.java deleted file mode 100644 index c2b919c..0000000 --- a/src/main/java/packt/java9/by/example/mastermind/servlet/GameSessionSaver.java +++ /dev/null @@ -1,45 +0,0 @@ -package packt.java9.by.example.mastermind.servlet; - -import packt.java9.by.example.mastermind.ColorManager; -import packt.java9.by.example.mastermind.Table; - -import javax.inject.Inject; -import javax.servlet.http.HttpSession; -import java.util.HashMap; -import java.util.Map; - -public class GameSessionSaver { - private static final String STATE_NAME = "GAME_STATE"; - @Inject - private HtmlTools html; - @Inject - Table table; - @Inject - ColorManager manager; - - public void save(HttpSession session) { - Map params = convertTableToMap(); - session.setAttribute(STATE_NAME,params); - } - - public Map restore(HttpSession session){ - Map map= (Map)session.getAttribute(STATE_NAME); - if( map == null ){ - map = new HashMap<>(); - } - return map; - } - - private Map convertTableToMap() { - Map params = new HashMap<>(); - for (int row = 0; row < table.nrOfRows(); row++) { - for (int column = 0; column < table.nrOfColumns(); column++) { - params.put(html.paramNameGuess(row,column),table.getColor(row,column).toString()); - } - params.put(html.paramNameFull(row),""+table.getFull(row)); - params.put(html.paramNamePartial(row),""+table.getPartial(row)); - } - return params; - } - -} diff --git a/src/main/java/packt/java9/by/example/mastermind/servlet/HtmlTools.java b/src/main/java/packt/java9/by/example/mastermind/servlet/HtmlTools.java index 36fd1c7..46da1f7 100644 --- a/src/main/java/packt/java9/by/example/mastermind/servlet/HtmlTools.java +++ b/src/main/java/packt/java9/by/example/mastermind/servlet/HtmlTools.java @@ -32,9 +32,9 @@ public String inputBox(String name, String value) { return tag("input", "type", "text", "name", name, "value", value, "size", "1"); } - public String colorToHtml(Color color, int row, int column, boolean useSession) { - return (useSession ? "" : tag("input", "type", "hidden", "name", paramNameGuess(row, column), - "value", color.toString())) + + public String colorToHtml(Color color, int row, int column) { + return tag("input", "type", "hidden", "name", paramNameGuess(row, column), + "value", color.toString()) + tag("div", "class", "color" + color) + tag("/div") + tag("div", "class", "spacer") + @@ -54,27 +54,21 @@ public String paramNameGuess(int row, int column) { return "guess" + row + column; } - public String tableToHtml(boolean useSession) { + public String tableToHtml() { StringBuilder sb = new StringBuilder(); sb.append(""); sb.append(""); sb.append("Mastermind guessing"); sb.append(""); - String useSessionParam = useSession ? "?use_session=1" : ""; - sb.append(tag("form", "method", "POST", "action", "master" + useSessionParam)); + sb.append(tag("form", "method", "POST", "action", "master")); for (int row = 0; row < table.nrOfRows(); row++) { for (int column = 0; column < NR_COLUMNS; column++) { - sb.append(colorToHtml(table.getColor(row, column), row, column, useSession)); - } - if (useSession && row < table.nrOfRows() - 1) { - sb.append("" + table.getFull(row)); - sb.append(tag("div", "class", "spacer")).append(tag("/div")); - sb.append("" + table.getPartial(row)); - } else { - sb.append(inputBox(paramNameFull(row), "" + table.getFull(row))); - sb.append(inputBox(paramNamePartial(row), "" + table.getPartial(row))); + sb.append(colorToHtml(table.getColor(row, column), row, column)); } + + sb.append(inputBox(paramNameFull(row), "" + table.getFull(row))); + sb.append(inputBox(paramNamePartial(row), "" + table.getPartial(row))); sb.append("

"); } return sb.toString(); diff --git a/src/main/java/packt/java9/by/example/mastermind/servlet/MastermindHandler.java b/src/main/java/packt/java9/by/example/mastermind/servlet/MastermindHandler.java index 46414b8..0e4d1c2 100644 --- a/src/main/java/packt/java9/by/example/mastermind/servlet/MastermindHandler.java +++ b/src/main/java/packt/java9/by/example/mastermind/servlet/MastermindHandler.java @@ -30,23 +30,14 @@ public class MastermindHandler { ColorManager manager; @Inject Guesser guesser; - @Inject - GameSessionSaver sessionSaver; - private boolean useSession; private static Logger log = LoggerFactory.getLogger(MastermindHandler.class); public void handle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - useSession = request.getParameter("use_session") != null; - Game game; - if (useSession) { - game = buildGameFromSessionAndRequest(request); - } else { - game = buildGameFromRequest(request); - } + Game game = buildGameFromRequest(request); Guess newGuess = guesser.guess(); response.setContentType("text/html"); PrintWriter out = response.getWriter(); @@ -55,22 +46,19 @@ public void handle(HttpServletRequest request, } else { log.debug("Adding new guess {} to the game", newGuess); game.addGuess(newGuess, 0, 0); - if (useSession) { - sessionSaver.save(request.getSession()); - } displayGame(out); } bodyEnd(out); } private void displayGameOver(PrintWriter out) throws IOException { - out.println(html.tableToHtml(useSession)); + out.println(html.tableToHtml()); out.println(""); out.println("Game finished, no more guesses"); } private void displayGame(PrintWriter out) throws IOException { - out.println(html.tableToHtml(useSession)); + out.println(html.tableToHtml()); out.println(html.tag("input", "type", "submit", "value", "submit")); out.println(""); @@ -80,21 +68,6 @@ private void bodyEnd(PrintWriter out) { out.println(""); } - private Game buildGameFromSessionAndRequest(HttpServletRequest request) { - Game game = buildGameFromMap(sessionSaver.restore(request.getSession())); - Map params = toMap(request); - int row = getLastRowIndex(params); - log.debug("last row is {}", row); - if (row >= 0) { - final int full = Integer.parseInt(params.get(html.paramNameFull(row))); - final int partial = Integer.parseInt(params.get(html.paramNamePartial(row))); - log.debug("setting full {} and partial {} for row {}", full, partial, row); - table.setPartial(row, partial); - table.setFull(row, full); - } - return game; - } - private static final int MAX_ROWS = 10; private int getLastRowIndex(Map params) { @@ -104,7 +77,7 @@ private int getLastRowIndex(Map params) { row = i; } } - log.debug("last row is {}",row); + log.debug("last row is {}", row); return row; } From 3c3b21742f01aa690268a8a281c0ddd745fc2de9 Mon Sep 17 00:00:00 2001 From: Peter Verhas Date: Wed, 12 Oct 2016 21:12:45 +0200 Subject: [PATCH 2/2] toMap was refactored to use streams --- .../mastermind/servlet/MastermindHandler.java | 15 ++++---- tmp/tmp.xml | 34 ++++++------------- 2 files changed, 16 insertions(+), 33 deletions(-) diff --git a/src/main/java/packt/java9/by/example/mastermind/servlet/MastermindHandler.java b/src/main/java/packt/java9/by/example/mastermind/servlet/MastermindHandler.java index 0e4d1c2..e2126f6 100644 --- a/src/main/java/packt/java9/by/example/mastermind/servlet/MastermindHandler.java +++ b/src/main/java/packt/java9/by/example/mastermind/servlet/MastermindHandler.java @@ -11,8 +11,8 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; -import java.util.HashMap; import java.util.Map; +import java.util.stream.Collectors; public class MastermindHandler { @@ -87,14 +87,11 @@ private Game buildGameFromRequest(HttpServletRequest request) { private Map toMap(HttpServletRequest request) { log.debug("converting request to map"); - Map map = new HashMap<>(); - for (Map.Entry entry : request.getParameterMap().entrySet()) { - if (entry.getValue() != null) { - log.debug("put({},{})", (String) entry.getKey(), ((String[]) entry.getValue())[0]); - map.put((String) entry.getKey(), ((String[]) entry.getValue())[0]); - } - } - return map; + return request.getParameterMap().entrySet(). + stream().collect( + Collectors.toMap( + Map.Entry::getKey, + e -> e.getValue()[0])); } private Game buildGameFromMap(Map params) { diff --git a/tmp/tmp.xml b/tmp/tmp.xml index 5caa324..a97c0c9 100644 --- a/tmp/tmp.xml +++ b/tmp/tmp.xml @@ -3,50 +3,36 @@ Mastermind guessing -

+ +
+
+
+

+

+
+
+
- -

-

-
-
-
-
-
-
-
- - -

-

-
-
-
-
-
-
-
- - +