package controllers; import actions.User; import com.avaje.ebean.Ebean; import models.Difficulty; import models.Event; import models.Game; import models.Mode; import models.Platform; import models.Ship; import models.Stage; import play.data.Form; import play.mvc.Controller; import play.mvc.Result; import views.html.game_read; import views.html.game_update; import java.util.Map; import java.util.Scanner; import static play.data.Form.form; public class GameController extends Controller { public static Result indexWithName(models.Game game, String name) { return ok(game_read.render(game)); } public static Result index(models.Game game) { if (game == null) { return notFound(); } return ok(game_read.render(game)); } public static Result update(models.Game game) { if (game == null) { return notFound(); } if (!User.current().isAuthenticated() && !User.current().isAdministrator()) { return unauthorized(); } return ok(game_update.render(game)); } public static Result create() { return ok(views.html.game_create.render()); } public static Result createEventOf(models.Game game) { return ok(views.html.event_create.render(game, form(Event.class))); } public static Result saveEvent(models.Game originalGame) { Form<models.Event> form = new Form<Event>(models.Event.class).bindFromRequest(); models.Event event = form.get(); Game game = new Game("[" + event.name + "] " + originalGame.title, originalGame.cover, originalGame.thread); if (originalGame.hasDifficulties()) { for (Difficulty difficulty : originalGame.difficulties) { game.difficulties.add(new Difficulty(difficulty.name)); } } if (originalGame.hasStages()) { for (Stage stage : originalGame.stages) { game.stages.add(new Stage(stage.name)); } } if (originalGame.hasModes()) { for (Mode mode : originalGame.modes) { game.modes.add(new Mode(mode.name, mode.scoreType)); } } if (originalGame.hasPlatforms()) { for (Platform platform : originalGame.platforms) { game.platforms.add(new Platform(platform.name)); } } if (originalGame.hasShip()) { for (Ship ship : originalGame.ships) { game.ships.add(new Ship(ship.name)); } } event.game = game; Ebean.save(event); return index(game); } public static Result save() { Form<models.Game> form = new Form<models.Game>(models.Game.class).bindFromRequest(); models.Game game = form.get(); createPlatforms(game); createDifficulties(game); createShips(game); createModes(game); createStages(game); game.save(); return index(game); } public static Result addPlatform(Game game) { String platformName = request().body().asFormUrlEncoded().get("platform")[0]; createPlatform(game, platformName); game.save(); return update(game); } public static Result addDifficulty(Game game) { Map<String, String[]> data = request().body().asFormUrlEncoded(); String difficultyName = data.get("difficulty")[0]; int sortOrder = Integer.parseInt(data.get("sortOrder")[0]); createDifficulty(game, sortOrder, difficultyName); game.save(); return update(game); } public static Result addMode(Game game) { Map<String, String[]> data = request().body().asFormUrlEncoded(); String modeName = data.get("mode")[0]; int sortOrder = Integer.parseInt(data.get("sortOrder")[0]); createMode(game, sortOrder, modeName); game.save(); return update(game); } public static Result addShip(Game game) { Map<String, String[]> data = request().body().asFormUrlEncoded(); String shipName = data.get("ship")[0]; int sortOrder = Integer.parseInt(data.get("sortOrder")[0]); createShip(game, sortOrder, shipName); game.save(); return update(game); } public static Result addStage(Game game) { Map<String, String[]> data = request().body().asFormUrlEncoded(); String stageName = data.get("stage")[0]; int sortOrder = Integer.parseInt(data.get("sortOrder")[0]); createStage(game, sortOrder, stageName); game.save(); return update(game); } private static void createPlatform(Game game, String platformName) { game.platforms.add(new Platform(platformName)); } private static void createPlatforms(models.Game game) { Scanner sc = new Scanner(game.platforms.get(0).name); if (sc.hasNextLine()) { while (sc.hasNextLine()) { createPlatform(game, sc.nextLine().trim()); } game.platforms.remove(0); } else { createPlatform(game, " "); } } private static void createDifficulties(models.Game game) { Integer index = 0; Scanner sc = new Scanner(game.difficulties.get(0).name); game.difficulties.remove(0); while (sc.hasNextLine()) { createDifficulty(game, index, sc.nextLine().trim()); index++; } } private static void createDifficulty(Game game, Integer index, String difficultyName) { Difficulty difficulty = new Difficulty(difficultyName); difficulty.sortOrder = index.toString(); game.difficulties.add(difficulty); } private static void createModes(models.Game game) { Integer index = 0; Scanner sc = new Scanner(game.modes.get(0).name); game.modes.remove(0); while (sc.hasNextLine()) { createMode(game, index, sc.nextLine().trim()); index++; } } private static void createMode(Game game, Integer index, String modeName) { Mode mode = new Mode(modeName); mode.sortOrder = index.toString(); game.modes.add(mode); } private static void createShips(models.Game game) { Integer index = 0; Scanner sc = new Scanner(game.ships.get(0).name); game.ships.remove(0); while (sc.hasNextLine()) { createShip(game, index, sc.nextLine().trim()); index++; } } private static void createShip(Game game, Integer index, String shipName) { Ship ship = new Ship(shipName); ship.sortOrder = index.toString(); game.ships.add(ship); } private static void createStage(Game game, Integer index, String stageName) { Stage stage = new Stage(stageName); stage.sortOrder = index.longValue(); game.stages.add(stage); } private static void createStages(models.Game game) { Long index = 0L; Scanner sc = new Scanner(game.stages.get(0).name); game.stages.remove(0); if (sc.hasNextLine()) { while (sc.hasNextLine()) { Stage stage = new Stage(sc.nextLine().trim()); stage.sortOrder = index; game.stages.add(stage); index++; } } else { Stage stage = new Stage(" "); game.stages.add(stage); stage.sortOrder = index; } } }