diff --git a/build.gradle b/build.gradle index 585940f..5411cac 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,8 @@ apply plugin: 'jetty' repositories { jcenter() } - +targetCompatibility = "1.9" +sourceCompatibility = "1.9" dependencies { providedCompile "javax.servlet:javax.servlet-api:3.1.0" testCompile 'junit:junit:4.12' diff --git a/src/main/java/packt/java9/by/example/mastermind/ColorManager.java b/src/main/java/packt/java9/by/example/mastermind/ColorManager.java index eb317e8..6fd9b1d 100644 --- a/src/main/java/packt/java9/by/example/mastermind/ColorManager.java +++ b/src/main/java/packt/java9/by/example/mastermind/ColorManager.java @@ -1,13 +1,13 @@ package packt.java9.by.example.mastermind; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import javax.inject.Inject; import javax.inject.Named; import javax.inject.Singleton; import java.util.HashMap; import java.util.Map; +import java.lang.System.Logger; + +import static java.lang.System.Logger.Level.DEBUG; @Singleton public class ColorManager { @@ -15,11 +15,11 @@ public class ColorManager { protected final Map successor = new HashMap<>(); private Color first; private final ColorFactory factory; - private static final Logger log = LoggerFactory.getLogger(ColorManager.class); + private static final Logger log = System.getLogger(ColorManager.class.getName()); @Inject public ColorManager(@Named("nrColors") int nrColors, ColorFactory factory) { - log.debug("creating colorManager for {} colors",nrColors); + log.log(DEBUG,"creating colorManager for {0} colors",nrColors); this.nrColors = nrColors; this.factory = factory; createOrdering(); diff --git a/src/main/java/packt/java9/by/example/mastermind/Game.java b/src/main/java/packt/java9/by/example/mastermind/Game.java index d256a7c..a062d60 100644 --- a/src/main/java/packt/java9/by/example/mastermind/Game.java +++ b/src/main/java/packt/java9/by/example/mastermind/Game.java @@ -8,6 +8,11 @@ public class Game { final Table table; final private Guess secret; + + public void setFinished() { + this.finished = true; + } + boolean finished = false; final int nrOfColumns; 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 index c2b919c..8937273 100644 --- a/src/main/java/packt/java9/by/example/mastermind/servlet/GameSessionSaver.java +++ b/src/main/java/packt/java9/by/example/mastermind/servlet/GameSessionSaver.java @@ -22,6 +22,10 @@ public void save(HttpSession session) { session.setAttribute(STATE_NAME,params); } + public void reset(HttpSession session) { + session.removeAttribute(STATE_NAME); + } + public Map restore(HttpSession session){ Map map= (Map)session.getAttribute(STATE_NAME); if( map == null ){ 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..973be20 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,16 +32,13 @@ 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())) + - tag("div", "class", "color" + color) + + public String colorToHtml(Color color, int row, int column) { + return tag("div", "class", "color" + color) + tag("/div") + tag("div", "class", "spacer") + tag("/div"); } - public String paramNameFull(int row) { return "full" + row; } @@ -54,20 +51,19 @@ 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)); + sb.append(colorToHtml(table.getColor(row, column), row, column)); } - if (useSession && row < table.nrOfRows() - 1) { + if ( row < table.nrOfRows() - 1) { sb.append("" + table.getFull(row)); sb.append(tag("div", "class", "spacer")).append(tag("/div")); sb.append("" + table.getPartial(row)); diff --git a/src/main/java/packt/java9/by/example/mastermind/servlet/Mastermind.java b/src/main/java/packt/java9/by/example/mastermind/servlet/Mastermind.java index 9b05d37..90a78e8 100644 --- a/src/main/java/packt/java9/by/example/mastermind/servlet/Mastermind.java +++ b/src/main/java/packt/java9/by/example/mastermind/servlet/Mastermind.java @@ -17,6 +17,8 @@ public class Mastermind extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + GameSessionSaver sessionSaver = new GameSessionSaver(); + sessionSaver.reset(request.getSession()); doPost(request, response); } 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..f640a98 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 { @@ -33,20 +33,13 @@ public class MastermindHandler { @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 = buildGameFromSessionAndRequest(request); Guess newGuess = guesser.guess(); response.setContentType("text/html"); PrintWriter out = response.getWriter(); @@ -55,22 +48,20 @@ 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()); - } + 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(""); @@ -91,6 +82,9 @@ private Game buildGameFromSessionAndRequest(HttpServletRequest request) { log.debug("setting full {} and partial {} for row {}", full, partial, row); table.setPartial(row, partial); table.setFull(row, full); + if (full == table.nrOfColumns()) { + game.setFinished(); + } } return game; } @@ -104,24 +98,17 @@ private int getLastRowIndex(Map params) { row = i; } } - log.debug("last row is {}",row); + log.debug("last row is {}", row); return row; } - private Game buildGameFromRequest(HttpServletRequest request) { - return buildGameFromMap(toMap(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 -
+ +
+
+
+

+

+
+
+
- -

-

-
-
-
-
-
-
-
- - -

-

-
-
-
-
-
-
-
- - +