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 b60384d2358c54be07241b4762f518051af31359..61621f54d170ce2f7bb71b2221f9d25d82507f52 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 @@ -20,6 +20,8 @@ class PadLoader { val pad = new Pad() pad.id = UUID.fromString(json.get(PAD_ID).getAsString) pad.name = json.get(PAD_NAME).getAsString + pad.position = json.get(PAD_POSITION).getAsInt + pad.name = json.get(PAD_CONTENT_TYPE).getAsString pad.page = page pad 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 19e0c133593cfda3ebe38f1895795e4a6c8626d4..cffdcbc2b65fa71884772d7a1e3fb7f818bc9c7f 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 @@ -23,6 +23,7 @@ class PadLoader(val connection: Connection) { pad.id = UUID.fromString(result.getString(PAD_ID)) pad.name = result.getString(PAD_NAME) pad.position = result.getInt(PAD_POSITION) + pad.contentType = result.getString(PAD_CONTENT_TYPE) val pathLoader = new PathLoader(connection) pad.paths = pathLoader.load(pad) 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 47a330ad654b21e20ad1867695a5e9402f329ff5..ec524877aee4c6d33362c9ef71b74e0e421651f7 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 @@ -13,6 +13,7 @@ class PadSaver(val connection: Connection) { def save(pad: Pad): Unit = { SqlHelper.insertOrUpdate(connection, PAD, pad.id, PAD_NAME, pad.name) SqlHelper.insertOrUpdate(connection, PAD, pad.id, PAD_POSITION, pad.position) + SqlHelper.insertOrUpdate(connection, PAD, pad.id, PAD_CONTENT_TYPE, pad.contentType) SqlHelper.insertOrUpdate(connection, PAD, pad.id, PAD_PAGE_REF, pad.page.id) val pathSaver = new PathSaver(connection) 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 5bcefb151c6a75a852f21ea08b0b519dea44aea3..3244043797ed8fbfc133eacf302bf683a6c9a226 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 @@ -21,6 +21,6 @@ object JsonDef { val PAD_PATHS = "paths" val PATH_ID = "id" - val PATH_PATH = "name" + val PATH_PATH = "path" } 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 29d701cbade4dd46cf9469d2db1ed3407b725770..9e11d7a9fd107d147ee14e00306257d505e6e193 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 @@ -20,6 +20,7 @@ object SqlDef { val PAD_ID = "id" val PAD_NAME = "name" val PAD_POSITION = "position" + val PAD_CONTENT_TYPE = "content_type" val PAD_PAGE_REF = "page_id" val PATH = "Path" 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 d1633a0c4e6ad1559b4d859a27b7928c00c45bb4..549a098a6e9007af106ed6001382a4d4c02cabdb 100644 --- a/src/main/scala/de/tobias/playpad/server/server/SqlHelper.scala +++ b/src/main/scala/de/tobias/playpad/server/server/SqlHelper.scala @@ -1,5 +1,6 @@ package de.tobias.playpad.server.server +import java.sql.Types.NULL import java.sql.{Connection, PreparedStatement} import java.util.UUID @@ -42,6 +43,9 @@ object SqlHelper { case value: UUID => preparedStatement.setString(2, value.toString) preparedStatement.setString(3, value.toString) + case null => + preparedStatement.setNull(2, NULL) + preparedStatement.setNull(3, NULL) } @@ -103,7 +107,7 @@ object SqlHelper { |) ENGINE=InnoDB DEFAULT CHARSET=latin1;""".stripMargin) createTable( """CREATE TABLE `Path` ( - | `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + | `id` varchar(40) NOT NULL DEFAULT '', | `path` text, | `pad_id` varchar(40) DEFAULT NULL, | PRIMARY KEY (`id`), diff --git a/src/main/scala/de/tobias/playpad/server/server/project/sync/ProjectSyncHandler.scala b/src/main/scala/de/tobias/playpad/server/server/project/sync/ProjectSyncHandler.scala index 7e68623dc5e769c5a94ac3b4c29c8f4fede29792..1ec5f7a4402fb6fcbd4f307f2828d872ed066390 100644 --- a/src/main/scala/de/tobias/playpad/server/server/project/sync/ProjectSyncHandler.scala +++ b/src/main/scala/de/tobias/playpad/server/server/project/sync/ProjectSyncHandler.scala @@ -6,9 +6,9 @@ import com.google.gson.{JsonObject, JsonParser} import com.j256.ormlite.dao.Dao import de.tobias.playpad.server.account import de.tobias.playpad.server.account.Account -import de.tobias.playpad.server.server.project.sync.listener.pad.{PadAddListener, PadRemoveListener} +import de.tobias.playpad.server.server.project.sync.listener.pad.{PadAddListener, PadClearListener, PadUpdateListener} import de.tobias.playpad.server.server.project.sync.listener.page.{PageAddListener, PageRemoveListener, PageUpdateListener} -import de.tobias.playpad.server.server.project.sync.listener.path.PathAddListener +import de.tobias.playpad.server.server.project.sync.listener.path.{PathAddListener, PathRemoveListener, PathUpdateListener} import de.tobias.playpad.server.server.project.sync.listener.project.{ProjectAddListener, ProjectRemoveListener, ProjectUpdateListener} import org.eclipse.jetty.websocket.api.Session import org.eclipse.jetty.websocket.api.annotations.{OnWebSocketClose, OnWebSocketConnect, OnWebSocketMessage, WebSocket} @@ -35,10 +35,12 @@ import scala.collection.{Map, mutable} "page-rm" -> new PageRemoveListener(), "pad-add" -> new PadAddListener(), - //"pad-update" -> new PadUpdateListener(), - "pad-rm" -> new PadRemoveListener(), + "pad-update" -> new PadUpdateListener(), + "pad-clear" -> new PadClearListener(), - "path-add" -> new PathAddListener() + "path-add" -> new PathAddListener(), + "path-update" -> new PathUpdateListener(), + "path-rm" -> new PathRemoveListener() ) @OnWebSocketConnect def onConnect(serverSession: Session): Unit = { @@ -66,8 +68,7 @@ import scala.collection.{Map, mutable} val session = account.Session.getSession(key, sessionDao) session match { - case Some(s) => - this.sessions(s.getAccount) -= serverSession + case Some(s) => this.sessions(s.getAccount) -= serverSession case None => serverSession.close(500, "Invalid Key") } } diff --git a/src/main/scala/de/tobias/playpad/server/server/project/sync/listener/pad/PadAddListener.scala b/src/main/scala/de/tobias/playpad/server/server/project/sync/listener/pad/PadAddListener.scala index c835bb0159318b4b83d7e11dc22893b71d9e7d11..e9aeff3659b30b8eef4b35785388c1d2b50fb827 100644 --- a/src/main/scala/de/tobias/playpad/server/server/project/sync/listener/pad/PadAddListener.scala +++ b/src/main/scala/de/tobias/playpad/server/server/project/sync/listener/pad/PadAddListener.scala @@ -15,12 +15,8 @@ import de.tobias.playpad.server.server.project.sync.listener.Listener class PadAddListener extends Listener { override def onChange(json: JsonObject, connection: Connection, session: Session): Unit = { val padId = UUID.fromString(json.get("id").getAsString) - val pageId = UUID.fromString(json.get("page").getAsString) - val padName = json.get("name").getAsString - val padPosition= json.get("position").getAsInt - SqlHelper.insertOrUpdate(connection, SqlDef.PAD, padId, SqlDef.PAD_PAGE_REF, pageId) - SqlHelper.insertOrUpdate(connection, SqlDef.PAD, padId, SqlDef.PAD_NAME, padName) - SqlHelper.insertOrUpdate(connection, SqlDef.PAD, padId, SqlDef.PAD_POSITION, padPosition) + SqlHelper.insertOrUpdate(connection, SqlDef.PAD, padId, SqlDef.PAD_NAME, "") + SqlHelper.insertOrUpdate(connection, SqlDef.PAD, padId, SqlDef.PAD_CONTENT_TYPE, null) } } diff --git a/src/main/scala/de/tobias/playpad/server/server/project/sync/listener/pad/PadRemoveListener.scala b/src/main/scala/de/tobias/playpad/server/server/project/sync/listener/pad/PadClearListener.scala similarity index 77% rename from src/main/scala/de/tobias/playpad/server/server/project/sync/listener/pad/PadRemoveListener.scala rename to src/main/scala/de/tobias/playpad/server/server/project/sync/listener/pad/PadClearListener.scala index 6f31c8f4d92e21abf856c621a9835779984fae2e..92f29cf1fb1f4c2ab26c764f9dceecd03f385a8b 100644 --- a/src/main/scala/de/tobias/playpad/server/server/project/sync/listener/pad/PadRemoveListener.scala +++ b/src/main/scala/de/tobias/playpad/server/server/project/sync/listener/pad/PadClearListener.scala @@ -12,10 +12,10 @@ import de.tobias.playpad.server.server.project.sync.listener.Listener /** * Created by tobias on 19.02.17. */ -class PadRemoveListener extends Listener { +class PadClearListener extends Listener { override def onChange(json: JsonObject, connection: Connection, session: Session): Unit = { - val padId = UUID.fromString(json.get("id").getAsString) + val pageId = UUID.fromString(json.get("id").getAsString) - SqlHelper.delete(connection, SqlDef.PAD, padId) + SqlHelper.delete(connection, SqlDef.PAGE, pageId) } } diff --git a/src/main/scala/de/tobias/playpad/server/server/project/sync/listener/pad/PadUpdateListener.scala b/src/main/scala/de/tobias/playpad/server/server/project/sync/listener/pad/PadUpdateListener.scala new file mode 100644 index 0000000000000000000000000000000000000000..fe4590e36621e7279a4c055565727d3cad5692f1 --- /dev/null +++ b/src/main/scala/de/tobias/playpad/server/server/project/sync/listener/pad/PadUpdateListener.scala @@ -0,0 +1,33 @@ +package de.tobias.playpad.server.server.project.sync.listener.pad + +import java.sql.Connection +import java.util.UUID + +import com.google.gson.JsonObject +import de.tobias.playpad.server.account.Session +import de.tobias.playpad.server.project.utils.SqlDef +import de.tobias.playpad.server.server.SqlHelper +import de.tobias.playpad.server.server.project.sync.listener.Listener + +/** + * Created by tobias on 19.02.17. + */ +class PadUpdateListener extends Listener { + override def onChange(json: JsonObject, connection: Connection, session: Session): Unit = { + val padID = UUID.fromString(json.get("id").getAsString) + val pageId = UUID.fromString(json.get("page").getAsString) + val field = json.get("field").getAsString + + SqlHelper.insertOrUpdate(connection, SqlDef.PAD, padID, SqlDef.PAD_PAGE_REF, pageId) + + field match { + case "name" => SqlHelper.insertOrUpdate(connection, SqlDef.PAD, padID, SqlDef.PAD_NAME, json.get("value").getAsString) + case "position" => SqlHelper.insertOrUpdate(connection, SqlDef.PAD, padID, SqlDef.PAD_POSITION, json.get("value").getAsInt) + case "contentType" => if (!json.get("value").isJsonNull) { + SqlHelper.insertOrUpdate(connection, SqlDef.PAD, padID, SqlDef.PAD_CONTENT_TYPE, json.get("value").getAsString) + } else { + SqlHelper.insertOrUpdate(connection, SqlDef.PAD, padID, SqlDef.PAD_CONTENT_TYPE, null) + } + } + } +} 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 6cdce90f3c721e91432456eaa9306287aae38069..33ab2d7fa3f5311789197984e8893623b89e03ce 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 @@ -16,9 +16,12 @@ class PathAddListener extends Listener { override def onChange(json: JsonObject, connection: Connection, session: Session): Unit = { val pathId = UUID.fromString(json.get("id").getAsString) val padId = UUID.fromString(json.get("pad").getAsString) - val path = json.get("path").getAsString - SqlHelper.insertOrUpdate(connection, SqlDef.PATH, pathId, SqlDef.PAD_PAGE_REF, padId) - SqlHelper.insertOrUpdate(connection, SqlDef.PATH, pathId, SqlDef.PAD_NAME, path) + SqlHelper.insertOrUpdate(connection, SqlDef.PATH, pathId, SqlDef.PATH_PAD, padId) + + if (json.get("path") != null) { + val path = json.get("path").getAsString + SqlHelper.insertOrUpdate(connection, SqlDef.PATH, pathId, SqlDef.PATH_NAME, path) + } } } diff --git a/src/main/scala/de/tobias/playpad/server/server/project/sync/listener/path/PathRemoveListener.scala b/src/main/scala/de/tobias/playpad/server/server/project/sync/listener/path/PathRemoveListener.scala new file mode 100644 index 0000000000000000000000000000000000000000..3705e0cdbd3e90837a2ad07d29869f4c1449a600 --- /dev/null +++ b/src/main/scala/de/tobias/playpad/server/server/project/sync/listener/path/PathRemoveListener.scala @@ -0,0 +1,21 @@ +package de.tobias.playpad.server.server.project.sync.listener.path + +import java.sql.Connection +import java.util.UUID + +import com.google.gson.JsonObject +import de.tobias.playpad.server.account.Session +import de.tobias.playpad.server.project.utils.SqlDef +import de.tobias.playpad.server.server.SqlHelper +import de.tobias.playpad.server.server.project.sync.listener.Listener + +/** + * Created by tobias on 19.02.17. + */ +class PathRemoveListener extends Listener { + override def onChange(json: JsonObject, connection: Connection, session: Session): Unit = { + val pageId = UUID.fromString(json.get("id").getAsString) + + SqlHelper.delete(connection, SqlDef.PATH, pageId) + } +} 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 new file mode 100644 index 0000000000000000000000000000000000000000..b11aa7ae06f7c42f62873af262fbd3e1f3df6057 --- /dev/null +++ b/src/main/scala/de/tobias/playpad/server/server/project/sync/listener/path/PathUpdateListener.scala @@ -0,0 +1,27 @@ +package de.tobias.playpad.server.server.project.sync.listener.path + +import java.sql.Connection +import java.util.UUID + +import com.google.gson.JsonObject +import de.tobias.playpad.server.account.Session +import de.tobias.playpad.server.project.utils.SqlDef +import de.tobias.playpad.server.server.SqlHelper +import de.tobias.playpad.server.server.project.sync.listener.Listener + +/** + * Created by tobias on 19.02.17. + */ +class PathUpdateListener extends Listener { + override def onChange(json: JsonObject, connection: Connection, session: Session): Unit = { + val pathId = UUID.fromString(json.get("id").getAsString) + val padId = UUID.fromString(json.get("pad").getAsString) + val field = json.get("field").getAsString + + SqlHelper.insertOrUpdate(connection, SqlDef.PATH, pathId, SqlDef.PATH_PAD, padId) + + field match { + case "path" => SqlHelper.insertOrUpdate(connection, SqlDef.PATH, pathId, SqlDef.PATH_NAME, json.get("value").getAsString) + } + } +}