From 5a648b7bbaebd2783ffbfe8fa027a48430d1f42a Mon Sep 17 00:00:00 2001 From: tobias <thinkdifferent055@gmail.com> Date: Thu, 23 Feb 2017 19:25:53 +0100 Subject: [PATCH] Add Design and add Loader and Save classes --- .../playpad/server/project/Design.scala | 15 ++++++++ .../tobias/playpad/server/project/Pad.scala | 2 ++ .../project/loader/json/DesignLoader.scala | 23 +++++++++++++ .../project/loader/json/PadLoader.scala | 8 +++++ .../project/loader/sql/DesignLoader.scala | 34 +++++++++++++++++++ .../server/project/loader/sql/PadLoader.scala | 3 ++ .../project/loader/sql/PathLoader.scala | 2 +- .../project/saver/json/DesignSaver.scala | 20 +++++++++++ .../server/project/saver/json/PadSaver.scala | 4 +++ .../project/saver/sql/DesignSaver.scala | 18 ++++++++++ .../server/project/saver/sql/PadSaver.scala | 5 +++ .../server/project/utils/JsonDef.scala | 5 +++ .../playpad/server/project/utils/SqlDef.scala | 8 ++++- .../playpad/server/server/SqlHelper.scala | 11 +++++- .../sync/listener/path/PathAddListener.scala | 2 +- .../listener/path/PathUpdateListener.scala | 2 +- 16 files changed, 157 insertions(+), 5 deletions(-) create mode 100644 src/main/scala/de/tobias/playpad/server/project/Design.scala create mode 100644 src/main/scala/de/tobias/playpad/server/project/loader/json/DesignLoader.scala create mode 100644 src/main/scala/de/tobias/playpad/server/project/loader/sql/DesignLoader.scala create mode 100644 src/main/scala/de/tobias/playpad/server/project/saver/json/DesignSaver.scala create mode 100644 src/main/scala/de/tobias/playpad/server/project/saver/sql/DesignSaver.scala diff --git a/src/main/scala/de/tobias/playpad/server/project/Design.scala b/src/main/scala/de/tobias/playpad/server/project/Design.scala new file mode 100644 index 0000000..0dc6abb --- /dev/null +++ b/src/main/scala/de/tobias/playpad/server/project/Design.scala @@ -0,0 +1,15 @@ +package de.tobias.playpad.server.project + +import java.util.UUID + +/** + * Created by tobias on 23.02.17. + */ +class Design { + + var id: UUID = UUID.randomUUID() + var backgroundColor: String = _ + var playColor: String = _ + + var pad: Pad = _ +} diff --git a/src/main/scala/de/tobias/playpad/server/project/Pad.scala b/src/main/scala/de/tobias/playpad/server/project/Pad.scala index 9945e9f..9c4b0fc 100644 --- a/src/main/scala/de/tobias/playpad/server/project/Pad.scala +++ b/src/main/scala/de/tobias/playpad/server/project/Pad.scala @@ -14,5 +14,7 @@ class Pad() { var contentType: String = _ var paths: List[Path] = List() + var design: Design = _ + var page: Page = _ } diff --git a/src/main/scala/de/tobias/playpad/server/project/loader/json/DesignLoader.scala b/src/main/scala/de/tobias/playpad/server/project/loader/json/DesignLoader.scala new file mode 100644 index 0000000..057a19d --- /dev/null +++ b/src/main/scala/de/tobias/playpad/server/project/loader/json/DesignLoader.scala @@ -0,0 +1,23 @@ +package de.tobias.playpad.server.project.loader.json + +import java.util.UUID + +import com.google.gson.JsonObject +import de.tobias.playpad.server.project.{Design, Pad} +import de.tobias.playpad.server.project.utils.JsonDef + +/** + * Created by tobias on 23.02.17. + */ +class DesignLoader { + def load(jsonObject: JsonObject, pad: Pad): Design = { + val design = new Design() + + design.id = UUID.fromString(jsonObject.get(JsonDef.DESIGN_ID).getAsString) + design.backgroundColor = jsonObject.get(JsonDef.DESIGN_BACKGROUND_COLOR).getAsString + design.playColor = jsonObject.get(JsonDef.DESIGN_PLAY_COLOR).getAsString + design.pad = pad + + design + } +} diff --git a/src/main/scala/de/tobias/playpad/server/project/loader/json/PadLoader.scala b/src/main/scala/de/tobias/playpad/server/project/loader/json/PadLoader.scala index 61621f5..c3591c2 100644 --- a/src/main/scala/de/tobias/playpad/server/project/loader/json/PadLoader.scala +++ b/src/main/scala/de/tobias/playpad/server/project/loader/json/PadLoader.scala @@ -24,6 +24,14 @@ class PadLoader { pad.name = json.get(PAD_CONTENT_TYPE).getAsString pad.page = page + val pathLoader = new PathLoader + val pathJson = json.getAsJsonArray(PAD_PATHS) + pad.paths = pathLoader.load(pathJson, pad) + + val designLoader = new DesignLoader + val designJson = json.getAsJsonObject(PAD_DESIGN) + pad.design = designLoader.load(designJson, pad) + pad }).toList pads diff --git a/src/main/scala/de/tobias/playpad/server/project/loader/sql/DesignLoader.scala b/src/main/scala/de/tobias/playpad/server/project/loader/sql/DesignLoader.scala new file mode 100644 index 0000000..96b503f --- /dev/null +++ b/src/main/scala/de/tobias/playpad/server/project/loader/sql/DesignLoader.scala @@ -0,0 +1,34 @@ +package de.tobias.playpad.server.project.loader.sql + +import java.sql.Connection +import java.util.UUID + +import de.tobias.playpad.server.project.utils.SqlDef._ +import de.tobias.playpad.server.project.{Design, Pad} + +/** + * Created by tobias on 23.02.17. + */ +class DesignLoader(val connection: Connection) { + def load(pad: Pad): Design = { + val sql = s"SELECT * FROM $DESIGN WHERE $DESIGN_PAD_REF = ?" + val preparedStatement = connection.prepareStatement(sql) + preparedStatement.setString(1, pad.id.toString) + val result = preparedStatement.executeQuery() + + while (result.next()) { + val design = new Design + design.id = UUID.fromString(result.getString(DESIGN_ID)) + design.backgroundColor = result.getString(DESIGN_BACKGROUND_COLOR) + design.playColor = result.getString(DESIGN_PLAY_COLOR) + design.pad = pad + + result.close() + preparedStatement.close() + + return design + } + + null + } +} diff --git a/src/main/scala/de/tobias/playpad/server/project/loader/sql/PadLoader.scala b/src/main/scala/de/tobias/playpad/server/project/loader/sql/PadLoader.scala index cffdcbc..0e6daff 100644 --- a/src/main/scala/de/tobias/playpad/server/project/loader/sql/PadLoader.scala +++ b/src/main/scala/de/tobias/playpad/server/project/loader/sql/PadLoader.scala @@ -28,6 +28,9 @@ class PadLoader(val connection: Connection) { val pathLoader = new PathLoader(connection) pad.paths = pathLoader.load(pad) + val designLoader = new DesignLoader(connection) + pad.design = designLoader.load(pad) + pad.page = page pads = pad :: pads } diff --git a/src/main/scala/de/tobias/playpad/server/project/loader/sql/PathLoader.scala b/src/main/scala/de/tobias/playpad/server/project/loader/sql/PathLoader.scala index edfdb7c..b4da8fc 100644 --- a/src/main/scala/de/tobias/playpad/server/project/loader/sql/PathLoader.scala +++ b/src/main/scala/de/tobias/playpad/server/project/loader/sql/PathLoader.scala @@ -11,7 +11,7 @@ import de.tobias.playpad.server.project.{Pad, Path} */ class PathLoader(val connection: Connection) { def load(pad: Pad): List[Path] = { - val sql = s"SELECT * FROM $PATH WHERE $PATH_PAD = ?" + val sql = s"SELECT * FROM $PATH WHERE $PATH_PAD_REF = ?" val preparedStatement = connection.prepareStatement(sql) preparedStatement.setString(1, pad.id.toString) val result = preparedStatement.executeQuery() diff --git a/src/main/scala/de/tobias/playpad/server/project/saver/json/DesignSaver.scala b/src/main/scala/de/tobias/playpad/server/project/saver/json/DesignSaver.scala new file mode 100644 index 0000000..37144e1 --- /dev/null +++ b/src/main/scala/de/tobias/playpad/server/project/saver/json/DesignSaver.scala @@ -0,0 +1,20 @@ +package de.tobias.playpad.server.project.saver.json + +import com.google.gson.{JsonElement, JsonObject} +import de.tobias.playpad.server.project.Design +import de.tobias.playpad.server.project.utils.JsonDef._ + +/** + * Created by tobias on 23.02.17. + */ +class DesignSaver { + def save(design: Design): JsonElement = { + val json = new JsonObject() + if (design != null) { + json.addProperty(DESIGN_ID, design.id.toString) + json.addProperty(DESIGN_BACKGROUND_COLOR, design.backgroundColor) + json.addProperty(DESIGN_PLAY_COLOR, design.playColor) + } + json + } +} diff --git a/src/main/scala/de/tobias/playpad/server/project/saver/json/PadSaver.scala b/src/main/scala/de/tobias/playpad/server/project/saver/json/PadSaver.scala index 3a98a38..aec2e27 100644 --- a/src/main/scala/de/tobias/playpad/server/project/saver/json/PadSaver.scala +++ b/src/main/scala/de/tobias/playpad/server/project/saver/json/PadSaver.scala @@ -15,11 +15,15 @@ class PadSaver { val pathArray = new JsonArray() pad.paths.foreach(path => pathArray.add(pathSaver.save(path))) + val designSaver = new DesignSaver + val designJson = designSaver.save(pad.design) + jsonObject.addProperty(PAD_ID, pad.id.toString) jsonObject.addProperty(PAD_NAME, pad.name) jsonObject.addProperty(PAD_POSITION, pad.position) jsonObject.addProperty(PAD_CONTENT_TYPE, pad.contentType) jsonObject.add(PAD_PATHS, pathArray) + jsonObject.add(PAD_DESIGN, designJson) jsonObject } diff --git a/src/main/scala/de/tobias/playpad/server/project/saver/sql/DesignSaver.scala b/src/main/scala/de/tobias/playpad/server/project/saver/sql/DesignSaver.scala new file mode 100644 index 0000000..3f465bb --- /dev/null +++ b/src/main/scala/de/tobias/playpad/server/project/saver/sql/DesignSaver.scala @@ -0,0 +1,18 @@ +package de.tobias.playpad.server.project.saver.sql + +import java.sql.Connection + +import de.tobias.playpad.server.project.Design +import de.tobias.playpad.server.project.utils.SqlDef._ +import de.tobias.playpad.server.server.SqlHelper + +/** + * Created by tobias on 23.02.17. + */ +class DesignSaver(val connection: Connection) { + def save(design: Design): Unit = { + SqlHelper.insertOrUpdate(connection, DESIGN, design.id, DESIGN_BACKGROUND_COLOR, design.backgroundColor) + SqlHelper.insertOrUpdate(connection, DESIGN, design.id, DESIGN_PLAY_COLOR, design.playColor) + SqlHelper.insertOrUpdate(connection, DESIGN, design.id, DESIGN_PAD_REF, design.pad.id) + } +} diff --git a/src/main/scala/de/tobias/playpad/server/project/saver/sql/PadSaver.scala b/src/main/scala/de/tobias/playpad/server/project/saver/sql/PadSaver.scala index ec52487..602ed13 100644 --- a/src/main/scala/de/tobias/playpad/server/project/saver/sql/PadSaver.scala +++ b/src/main/scala/de/tobias/playpad/server/project/saver/sql/PadSaver.scala @@ -18,5 +18,10 @@ class PadSaver(val connection: Connection) { val pathSaver = new PathSaver(connection) pad.paths.foreach(pathSaver.save) + + if (pad.design != null) { + val designSaver = new DesignSaver(connection) + designSaver.save(pad.design) + } } } diff --git a/src/main/scala/de/tobias/playpad/server/project/utils/JsonDef.scala b/src/main/scala/de/tobias/playpad/server/project/utils/JsonDef.scala index 3244043..c0c5ef9 100644 --- a/src/main/scala/de/tobias/playpad/server/project/utils/JsonDef.scala +++ b/src/main/scala/de/tobias/playpad/server/project/utils/JsonDef.scala @@ -19,8 +19,13 @@ object JsonDef { val PAD_POSITION = "position" val PAD_CONTENT_TYPE = "contentType" val PAD_PATHS = "paths" + val PAD_DESIGN = "design" val PATH_ID = "id" val PATH_PATH = "path" + val DESIGN_ID = "id" + val DESIGN_BACKGROUND_COLOR = "background_color" + val DESIGN_PLAY_COLOR = "play_color" + } diff --git a/src/main/scala/de/tobias/playpad/server/project/utils/SqlDef.scala b/src/main/scala/de/tobias/playpad/server/project/utils/SqlDef.scala index 9e11d7a..6db997c 100644 --- a/src/main/scala/de/tobias/playpad/server/project/utils/SqlDef.scala +++ b/src/main/scala/de/tobias/playpad/server/project/utils/SqlDef.scala @@ -26,6 +26,12 @@ object SqlDef { val PATH = "Path" val PATH_ID = "id" val PATH_NAME = "path" - val PATH_PAD = "pad_id" + val PATH_PAD_REF = "pad_id" + + val DESIGN = "Design" + val DESIGN_ID = "id" + val DESIGN_PAD_REF = "pad_id" + val DESIGN_BACKGROUND_COLOR = "background_color" + val DESIGN_PLAY_COLOR = "play_color" } diff --git a/src/main/scala/de/tobias/playpad/server/server/SqlHelper.scala b/src/main/scala/de/tobias/playpad/server/server/SqlHelper.scala index 549a098..6eeb558 100644 --- a/src/main/scala/de/tobias/playpad/server/server/SqlHelper.scala +++ b/src/main/scala/de/tobias/playpad/server/server/SqlHelper.scala @@ -99,7 +99,6 @@ object SqlHelper { | `name` varchar(255) DEFAULT NULL, | `position` int(11) DEFAULT NULL, | `page` int(11) DEFAULT NULL, - | `design_id` varchar(48) DEFAULT NULL, | `page_id` varchar(48) DEFAULT NULL, | PRIMARY KEY (`id`), | UNIQUE KEY `id` (`id`) @@ -114,5 +113,15 @@ object SqlHelper { | KEY `pad_id` (`pad_id`), | CONSTRAINT `Path_ibfk_1` FOREIGN KEY (`pad_id`) REFERENCES `Pad` (`id`) ON DELETE CASCADE ON UPDATE CASCADE |) ENGINE=InnoDB DEFAULT CHARSET=latin1;""".stripMargin) + createTable( + """CREATE TABLE `Design` ( + | `id` varchar(40) NOT NULL DEFAULT '', + | `background_color` varchar(20) DEFAULT NULL, + | `play_color` varchar(20) DEFAULT NULL, + | `pad_id` varchar(40) DEFAULT NULL, + | PRIMARY KEY (`id`), + | KEY `pad_id` (`pad_id`), + | CONSTRAINT `Design_ibfk_1` FOREIGN KEY (`pad_id`) REFERENCES `Pad` (`id`) ON DELETE CASCADE ON UPDATE CASCADE + |) ENGINE=InnoDB DEFAULT CHARSET=latin1;""".stripMargin) } } diff --git a/src/main/scala/de/tobias/playpad/server/server/project/sync/listener/path/PathAddListener.scala b/src/main/scala/de/tobias/playpad/server/server/project/sync/listener/path/PathAddListener.scala index 33ab2d7..497e925 100644 --- a/src/main/scala/de/tobias/playpad/server/server/project/sync/listener/path/PathAddListener.scala +++ b/src/main/scala/de/tobias/playpad/server/server/project/sync/listener/path/PathAddListener.scala @@ -17,7 +17,7 @@ class PathAddListener extends Listener { val pathId = UUID.fromString(json.get("id").getAsString) val padId = UUID.fromString(json.get("pad").getAsString) - SqlHelper.insertOrUpdate(connection, SqlDef.PATH, pathId, SqlDef.PATH_PAD, padId) + SqlHelper.insertOrUpdate(connection, SqlDef.PATH, pathId, SqlDef.PATH_PAD_REF, padId) if (json.get("path") != null) { val path = json.get("path").getAsString diff --git a/src/main/scala/de/tobias/playpad/server/server/project/sync/listener/path/PathUpdateListener.scala b/src/main/scala/de/tobias/playpad/server/server/project/sync/listener/path/PathUpdateListener.scala index b11aa7a..59be933 100644 --- a/src/main/scala/de/tobias/playpad/server/server/project/sync/listener/path/PathUpdateListener.scala +++ b/src/main/scala/de/tobias/playpad/server/server/project/sync/listener/path/PathUpdateListener.scala @@ -18,7 +18,7 @@ class PathUpdateListener extends Listener { val padId = UUID.fromString(json.get("pad").getAsString) val field = json.get("field").getAsString - SqlHelper.insertOrUpdate(connection, SqlDef.PATH, pathId, SqlDef.PATH_PAD, padId) + SqlHelper.insertOrUpdate(connection, SqlDef.PATH, pathId, SqlDef.PATH_PAD_REF, padId) field match { case "path" => SqlHelper.insertOrUpdate(connection, SqlDef.PATH, pathId, SqlDef.PATH_NAME, json.get("value").getAsString) -- GitLab