From e7a26d162028f459f5f32aaaafb1703b4ca1aaf1 Mon Sep 17 00:00:00 2001
From: tobias <thinkdifferent055@gmail.com>
Date: Mon, 20 Feb 2017 22:21:32 +0100
Subject: [PATCH] Add Path to Pad, Add Saver and Loader for path; code cleanup

---
 .../tobias/playpad/server/project/Pad.scala   |  2 ++
 .../tobias/playpad/server/project/Path.scala  | 14 ++++++++
 .../project/loader/json/PathLoader.scala      | 29 +++++++++++++++
 .../server/project/loader/sql/PadLoader.scala |  5 ++-
 .../project/loader/sql/PathLoader.scala       | 35 +++++++++++++++++++
 .../project/loader/sql/ProjectLoader.scala    |  2 +-
 .../server/project/saver/json/PadSaver.scala  |  6 +++-
 .../server/project/saver/json/PathSaver.scala | 19 ++++++++++
 .../server/project/saver/sql/PadSaver.scala   |  3 ++
 .../server/project/saver/sql/PathSaver.scala  | 18 ++++++++++
 .../server/project/utils/JsonDef.scala        |  4 +++
 .../playpad/server/project/utils/SqlDef.scala |  5 +++
 .../playpad/server/server/SqlHelper.scala     |  9 +++++
 .../server/server/account/AccountPost.scala   |  2 +-
 .../server/server/plugin/PluginGet.scala      |  2 +-
 .../server/server/project/ProjectList.scala   |  2 --
 16 files changed, 150 insertions(+), 7 deletions(-)
 create mode 100644 src/main/scala/de/tobias/playpad/server/project/Path.scala
 create mode 100644 src/main/scala/de/tobias/playpad/server/project/loader/json/PathLoader.scala
 create mode 100644 src/main/scala/de/tobias/playpad/server/project/loader/sql/PathLoader.scala
 create mode 100644 src/main/scala/de/tobias/playpad/server/project/saver/json/PathSaver.scala
 create mode 100644 src/main/scala/de/tobias/playpad/server/project/saver/sql/PathSaver.scala

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 009b866..6c88a74 100644
--- a/src/main/scala/de/tobias/playpad/server/project/Pad.scala
+++ b/src/main/scala/de/tobias/playpad/server/project/Pad.scala
@@ -13,5 +13,7 @@ class Pad() {
 	var position: Int = _
 	var pageIndex: Int = _
 
+	var paths: List[Path] = List()
+
 	var page: Page = _
 }
diff --git a/src/main/scala/de/tobias/playpad/server/project/Path.scala b/src/main/scala/de/tobias/playpad/server/project/Path.scala
new file mode 100644
index 0000000..6d921fa
--- /dev/null
+++ b/src/main/scala/de/tobias/playpad/server/project/Path.scala
@@ -0,0 +1,14 @@
+package de.tobias.playpad.server.project
+
+import java.util.UUID
+
+/**
+  * Created by tobias on 20.02.17.
+  */
+class Path {
+
+	var id: UUID = UUID.randomUUID()
+	var path: String = _
+
+	var pad: Pad = _
+}
diff --git a/src/main/scala/de/tobias/playpad/server/project/loader/json/PathLoader.scala b/src/main/scala/de/tobias/playpad/server/project/loader/json/PathLoader.scala
new file mode 100644
index 0000000..df1b32e
--- /dev/null
+++ b/src/main/scala/de/tobias/playpad/server/project/loader/json/PathLoader.scala
@@ -0,0 +1,29 @@
+package de.tobias.playpad.server.project.loader.json
+
+import java.util.UUID
+
+import com.google.gson.{JsonArray, JsonObject}
+import de.tobias.playpad.server.project.utils.JsonDef._
+import de.tobias.playpad.server.project.{Pad, Path}
+
+import scala.collection.JavaConverters
+
+/**
+  * Created by tobias on 20.02.17.
+  */
+class PathLoader {
+	def load(jsonArray: JsonArray, pad: Pad): List[Path] = {
+		val it = JavaConverters.asScalaIterator(jsonArray.iterator())
+		val paths = it.filter(_.isJsonObject).map(i => {
+			val json = i.asInstanceOf[JsonObject]
+
+			val path = new Path()
+			path.id = UUID.fromString(json.get(PATH_ID).getAsString)
+			path.path = json.get(PATH_PATH).getAsString
+			path.pad = pad
+
+			pad
+		}).toList
+		paths
+	}
+}
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 d97d547..fb33d4c 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
@@ -13,7 +13,7 @@ class PadLoader(val connection: Connection) {
 	def load(page: Page): List[Pad] = {
 		val sql = s"SELECT * FROM $PAD WHERE $PAD_PAGE_REF = ?"
 		val preparedStatement = connection.prepareStatement(sql)
-		preparedStatement.setString(1, page.toString)
+		preparedStatement.setString(1, page.id.toString)
 		val result = preparedStatement.executeQuery()
 
 		var pads: List[Pad] = List()
@@ -25,6 +25,9 @@ class PadLoader(val connection: Connection) {
 			pad.position = result.getInt(PAD_POSITION)
 			pad.pageIndex = result.getInt(PAD_PAGE)
 
+			val pathLoader = new PathLoader(connection)
+			pad.paths = pathLoader.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
new file mode 100644
index 0000000..edfdb7c
--- /dev/null
+++ b/src/main/scala/de/tobias/playpad/server/project/loader/sql/PathLoader.scala
@@ -0,0 +1,35 @@
+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.{Pad, Path}
+
+/**
+  * Created by tobias on 20.02.17.
+  */
+class PathLoader(val connection: Connection) {
+	def load(pad: Pad): List[Path] = {
+		val sql = s"SELECT * FROM $PATH WHERE $PATH_PAD = ?"
+		val preparedStatement = connection.prepareStatement(sql)
+		preparedStatement.setString(1, pad.id.toString)
+		val result = preparedStatement.executeQuery()
+
+		var paths: List[Path] = List()
+
+		while (result.next()) {
+			val path = new Path()
+			path.id = UUID.fromString(result.getString(PATH_ID))
+			path.path = result.getString(PATH_NAME)
+
+			path.pad = pad
+			paths = path :: paths
+		}
+
+		result.close()
+		preparedStatement.close()
+
+		paths
+	}
+}
diff --git a/src/main/scala/de/tobias/playpad/server/project/loader/sql/ProjectLoader.scala b/src/main/scala/de/tobias/playpad/server/project/loader/sql/ProjectLoader.scala
index 4f7e823..44660cc 100644
--- a/src/main/scala/de/tobias/playpad/server/project/loader/sql/ProjectLoader.scala
+++ b/src/main/scala/de/tobias/playpad/server/project/loader/sql/ProjectLoader.scala
@@ -3,8 +3,8 @@ package de.tobias.playpad.server.project.loader.sql
 import java.sql.Connection
 import java.util.UUID
 
-import de.tobias.playpad.server.project.{Project, ProjectReference}
 import de.tobias.playpad.server.project.utils.SqlDef._
+import de.tobias.playpad.server.project.{Project, ProjectReference}
 
 /**
   * Created by tobias on 17.02.17.
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 71711c6..39a62df 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
@@ -1,6 +1,6 @@
 package de.tobias.playpad.server.project.saver.json
 
-import com.google.gson.{JsonElement, JsonObject}
+import com.google.gson.{JsonArray, JsonElement, JsonObject}
 import de.tobias.playpad.server.project.Pad
 import de.tobias.playpad.server.project.utils.JsonDef._
 
@@ -16,6 +16,10 @@ class PadSaver {
 		jsonObject.addProperty(PAD_POSITION, pad.position)
 		jsonObject.addProperty(PAD_PAGE, pad.pageIndex)
 
+		val pathSaver = new PathSaver()
+		val pathArray = new JsonArray()
+		pad.paths.foreach(path => pathArray.add(pathSaver.save(path)))
+
 		jsonObject
 	}
 }
diff --git a/src/main/scala/de/tobias/playpad/server/project/saver/json/PathSaver.scala b/src/main/scala/de/tobias/playpad/server/project/saver/json/PathSaver.scala
new file mode 100644
index 0000000..52b9b1c
--- /dev/null
+++ b/src/main/scala/de/tobias/playpad/server/project/saver/json/PathSaver.scala
@@ -0,0 +1,19 @@
+package de.tobias.playpad.server.project.saver.json
+
+import com.google.gson.{JsonElement, JsonObject}
+import de.tobias.playpad.server.project.Path
+import de.tobias.playpad.server.project.utils.JsonDef._
+
+/**
+  * Created by tobias on 20.02.17.
+  */
+class PathSaver {
+	def save(path: Path): JsonElement = {
+		val jsonObject = new JsonObject()
+
+		jsonObject.addProperty(PATH_ID, path.id.toString)
+		jsonObject.addProperty(PATH_PATH, path.path)
+
+		jsonObject
+	}
+}
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 1e35fb0..1d998a3 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
@@ -15,5 +15,8 @@ class PadSaver(val connection: Connection) {
 		SqlHelper.insertOrUpdate(connection, PAD, pad.id, PAD_POSITION, pad.position)
 		SqlHelper.insertOrUpdate(connection, PAD, pad.id, PAD_PAGE, pad.pageIndex)
 		SqlHelper.insertOrUpdate(connection, PAD, pad.id, PAD_PAGE_REF, pad.page.id)
+
+		val pathSaver = new PathSaver(connection)
+		pad.paths.foreach(pathSaver.save)
 	}
 }
diff --git a/src/main/scala/de/tobias/playpad/server/project/saver/sql/PathSaver.scala b/src/main/scala/de/tobias/playpad/server/project/saver/sql/PathSaver.scala
new file mode 100644
index 0000000..7db424a
--- /dev/null
+++ b/src/main/scala/de/tobias/playpad/server/project/saver/sql/PathSaver.scala
@@ -0,0 +1,18 @@
+package de.tobias.playpad.server.project.saver.sql
+
+import java.sql.Connection
+
+import de.tobias.playpad.server.project.Path
+import de.tobias.playpad.server.project.utils.SqlDef._
+import de.tobias.playpad.server.server.SqlHelper
+
+/**
+  * Created by tobias on 20.02.17.
+  */
+class PathSaver(val connection: Connection) {
+	def save(path: Path): Unit = {
+		SqlHelper.insertOrUpdate(connection, PATH, path.id, PAD_NAME, path.path)
+		SqlHelper.insertOrUpdate(connection, PATH, path.id, PAD_POSITION, path.pad.id)
+
+	}
+}
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 e5666f8..3d869a1 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
@@ -18,5 +18,9 @@ object JsonDef {
 	val PAD_NAME = "name"
 	val PAD_POSITION = "position"
 	val PAD_PAGE = "page"
+	val PAD_PATHS = "paths"
+
+	val PATH_ID = "id"
+	val PATH_PATH = "name"
 
 }
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 63f2c4e..7b55076 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
@@ -23,4 +23,9 @@ object SqlDef {
 	val PAD_PAGE = "page"
 	val PAD_PAGE_REF = "page_id"
 
+	val PATH = "Path"
+	val PATH_ID = "id"
+	val PATH_NAME = "path"
+	val PATH_PAD = "pad_id"
+
 }
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 cd97aac..d1633a0 100644
--- a/src/main/scala/de/tobias/playpad/server/server/SqlHelper.scala
+++ b/src/main/scala/de/tobias/playpad/server/server/SqlHelper.scala
@@ -101,5 +101,14 @@ object SqlHelper {
 			  |  UNIQUE KEY `id` (`id`)
 			  |  CONSTRAINT `Pad_ibfk_1` FOREIGN KEY (`page_id`) REFERENCES `Page` (`id`) ON DELETE CASCADE
 			  |) ENGINE=InnoDB DEFAULT CHARSET=latin1;""".stripMargin)
+		createTable(
+			"""CREATE TABLE `Path` (
+			  |  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+			  |  `path` text,
+			  |  `pad_id` varchar(40) DEFAULT NULL,
+			  |  PRIMARY KEY (`id`),
+			  |  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)
 	}
 }
diff --git a/src/main/scala/de/tobias/playpad/server/server/account/AccountPost.scala b/src/main/scala/de/tobias/playpad/server/server/account/AccountPost.scala
index 8082e43..53f1292 100644
--- a/src/main/scala/de/tobias/playpad/server/server/account/AccountPost.scala
+++ b/src/main/scala/de/tobias/playpad/server/server/account/AccountPost.scala
@@ -5,7 +5,7 @@ import java.sql.SQLException
 import com.j256.ormlite.dao.Dao
 import de.tobias.playpad.server.account.Account
 import de.tobias.playpad.server.server.{Result, Status}
-import spark.{Request, Response, Route, Spark}
+import spark.{Request, Response, Route}
 
 /**
   * Created by tobias on 15.02.17.
diff --git a/src/main/scala/de/tobias/playpad/server/server/plugin/PluginGet.scala b/src/main/scala/de/tobias/playpad/server/server/plugin/PluginGet.scala
index c222880..5fb030f 100644
--- a/src/main/scala/de/tobias/playpad/server/server/plugin/PluginGet.scala
+++ b/src/main/scala/de/tobias/playpad/server/server/plugin/PluginGet.scala
@@ -4,7 +4,7 @@ import com.google.gson.Gson
 import com.j256.ormlite.dao.Dao
 import de.tobias.playpad.server.plugin.Plugin
 import de.tobias.playpad.server.server.{Result, Status}
-import spark.{Request, Response, Route, Spark}
+import spark.{Request, Response, Route}
 
 /**
   * Created by tobias on 05.02.17.
diff --git a/src/main/scala/de/tobias/playpad/server/server/project/ProjectList.scala b/src/main/scala/de/tobias/playpad/server/server/project/ProjectList.scala
index 99f506e..be483ef 100644
--- a/src/main/scala/de/tobias/playpad/server/server/project/ProjectList.scala
+++ b/src/main/scala/de/tobias/playpad/server/server/project/ProjectList.scala
@@ -1,13 +1,11 @@
 package de.tobias.playpad.server.server.project
 
 import java.sql.Connection
-import java.util.UUID
 
 import com.google.gson.{JsonArray, JsonObject}
 import com.j256.ormlite.dao.Dao
 import de.tobias.playpad.server.account.Session
 import de.tobias.playpad.server.project.loader.sql.ProjectLoader
-import de.tobias.playpad.server.project.saver.json.ProjectSaver
 import de.tobias.playpad.server.server.{Result, Status}
 import spark.{Request, Response, Route}
 
-- 
GitLab