From 6435fb47c7cb1666869872bbb9d10fe12ccabe1b Mon Sep 17 00:00:00 2001
From: tobias <thinkdifferent055@gmail.com>
Date: Fri, 17 Feb 2017 20:07:50 +0100
Subject: [PATCH] Add Project, Page, Pad classes and sql loader and json saver
 classes

---
 .../tobias/playpad/server/project/Pad.scala   | 18 +++++++++
 .../tobias/playpad/server/project/Page.scala  | 17 ++++++++
 .../playpad/server/project/Project.scala      | 17 ++++++++
 .../server/project/loader/PadLoader.scala     | 36 +++++++++++++++++
 .../server/project/loader/PageLoader.scala    | 37 +++++++++++++++++
 .../server/project/loader/ProjectLoader.scala | 40 +++++++++++++++++++
 .../server/project/server/json/PadSaver.scala | 21 ++++++++++
 .../project/server/json/PageSaver.scala       | 24 +++++++++++
 .../project/server/json/ProjectSaver.scala    | 23 +++++++++++
 9 files changed, 233 insertions(+)
 create mode 100644 src/main/scala/de/tobias/playpad/server/project/Pad.scala
 create mode 100644 src/main/scala/de/tobias/playpad/server/project/Page.scala
 create mode 100644 src/main/scala/de/tobias/playpad/server/project/Project.scala
 create mode 100644 src/main/scala/de/tobias/playpad/server/project/loader/PadLoader.scala
 create mode 100644 src/main/scala/de/tobias/playpad/server/project/loader/PageLoader.scala
 create mode 100644 src/main/scala/de/tobias/playpad/server/project/loader/ProjectLoader.scala
 create mode 100644 src/main/scala/de/tobias/playpad/server/project/server/json/PadSaver.scala
 create mode 100644 src/main/scala/de/tobias/playpad/server/project/server/json/PageSaver.scala
 create mode 100644 src/main/scala/de/tobias/playpad/server/project/server/json/ProjectSaver.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
new file mode 100644
index 0000000..d0a03da
--- /dev/null
+++ b/src/main/scala/de/tobias/playpad/server/project/Pad.scala
@@ -0,0 +1,18 @@
+package de.tobias.playpad.server.project
+
+import java.util.UUID
+
+/**
+  * Created by tobias on 17.02.17.
+  */
+class Pad() {
+
+	var id: UUID = UUID.randomUUID()
+	var name: String = _
+
+	var position: Int = _
+	var pageIndex: Int = _
+
+	var design: Design = _
+	var page: Page = _
+}
diff --git a/src/main/scala/de/tobias/playpad/server/project/Page.scala b/src/main/scala/de/tobias/playpad/server/project/Page.scala
new file mode 100644
index 0000000..079602a
--- /dev/null
+++ b/src/main/scala/de/tobias/playpad/server/project/Page.scala
@@ -0,0 +1,17 @@
+package de.tobias.playpad.server.project
+
+import java.util.UUID
+
+/**
+  * Created by tobias on 17.02.17.
+  */
+class Page {
+
+	var id: UUID = UUID.randomUUID()
+	var name: String = _
+
+	var position: Int = _
+
+	var pads: List[Pad] = List()
+	var project: Project = _ // FOREIGN KEY
+}
diff --git a/src/main/scala/de/tobias/playpad/server/project/Project.scala b/src/main/scala/de/tobias/playpad/server/project/Project.scala
new file mode 100644
index 0000000..5a20543
--- /dev/null
+++ b/src/main/scala/de/tobias/playpad/server/project/Project.scala
@@ -0,0 +1,17 @@
+package de.tobias.playpad.server.project
+
+import java.util.UUID
+
+/**
+  * Created by tobias on 17.02.17.
+  */
+class Project {
+
+	var id: UUID = UUID.randomUUID()
+	var name: String = _
+
+	var accountId: Int = _ // Account that own this project
+
+	var pages: List[Page] = _
+
+}
diff --git a/src/main/scala/de/tobias/playpad/server/project/loader/PadLoader.scala b/src/main/scala/de/tobias/playpad/server/project/loader/PadLoader.scala
new file mode 100644
index 0000000..54be495
--- /dev/null
+++ b/src/main/scala/de/tobias/playpad/server/project/loader/PadLoader.scala
@@ -0,0 +1,36 @@
+package de.tobias.playpad.server.project.loader
+
+import java.sql.Connection
+import java.util.UUID
+
+import de.tobias.playpad.server.project.{Pad, Page}
+
+/**
+  * Created by tobias on 17.02.17.
+  */
+class PadLoader {
+
+	def load(connection: Connection, pageId: UUID): List[Pad] = {
+		val sql = "SELECT * FROM Pad WHERE page_id = ?"
+		val preparedStatement = connection.prepareStatement(sql)
+		preparedStatement.setString(1, pageId.toString)
+		val result = preparedStatement.executeQuery()
+
+		var pads: List[Pad] = List()
+
+		while (result.next()) {
+			val pad = new Pad()
+			pad.id = UUID.fromString(result.getString("id"))
+			pad.name = result.getString("name")
+			pad.position = result.getInt("position")
+			pad.pageIndex = result.getInt("page")
+
+			pads = pad :: pads
+		}
+
+		result.close()
+		preparedStatement.close()
+
+		pads
+	}
+}
diff --git a/src/main/scala/de/tobias/playpad/server/project/loader/PageLoader.scala b/src/main/scala/de/tobias/playpad/server/project/loader/PageLoader.scala
new file mode 100644
index 0000000..ad39d6c
--- /dev/null
+++ b/src/main/scala/de/tobias/playpad/server/project/loader/PageLoader.scala
@@ -0,0 +1,37 @@
+package de.tobias.playpad.server.project.loader
+
+import java.sql.Connection
+import java.util.UUID
+
+import de.tobias.playpad.server.project.Page
+
+/**
+  * Created by tobias on 17.02.17.
+  */
+class PageLoader {
+
+	def load(connection: Connection, projectId: UUID): List[Page] = {
+		val sql = "SELECT * FROM Page WHERE project_id = ?"
+		val preparedStatement = connection.prepareStatement(sql)
+		preparedStatement.setString(1, projectId.toString)
+		val result = preparedStatement.executeQuery()
+
+		var pages: List[Page] = List()
+
+		while (result.next()) {
+			val page = new Page()
+			page.id = UUID.fromString(result.getString("id"))
+			page.name = result.getString("name")
+
+			val padLoader = new PadLoader()
+			page.pads = padLoader.load(connection, page.id)
+
+			pages = page :: pages
+		}
+
+		result.close()
+		preparedStatement.close()
+
+		pages
+	}
+}
diff --git a/src/main/scala/de/tobias/playpad/server/project/loader/ProjectLoader.scala b/src/main/scala/de/tobias/playpad/server/project/loader/ProjectLoader.scala
new file mode 100644
index 0000000..549f469
--- /dev/null
+++ b/src/main/scala/de/tobias/playpad/server/project/loader/ProjectLoader.scala
@@ -0,0 +1,40 @@
+package de.tobias.playpad.server.project.loader
+
+import java.sql.Connection
+import java.util.UUID
+
+import de.tobias.playpad.server.project.Project
+
+import scala.collection.mutable.ListBuffer
+
+/**
+  * Created by tobias on 17.02.17.
+  */
+class ProjectLoader {
+
+	def load(connection: Connection, id: UUID): List[Project] = {
+		val sql = "SELECT * FROM Project WHERE id = ?"
+		val preparedStatement = connection.prepareStatement(sql)
+		preparedStatement.setString(1, id.toString)
+		val result = preparedStatement.executeQuery()
+
+		var projects: List[Project] = List()
+
+		while (result.next()) {
+			val project = new Project()
+			project.id = UUID.fromString(result.getString("id"))
+			project.name = result.getString("name")
+			project.accountId = result.getInt("account_id")
+
+			val pageLoader = new PageLoader()
+			project.pages = pageLoader.load(connection, id)
+
+			projects = project :: projects
+		}
+
+		result.close()
+		preparedStatement.close()
+
+		projects
+	}
+}
diff --git a/src/main/scala/de/tobias/playpad/server/project/server/json/PadSaver.scala b/src/main/scala/de/tobias/playpad/server/project/server/json/PadSaver.scala
new file mode 100644
index 0000000..eb94451
--- /dev/null
+++ b/src/main/scala/de/tobias/playpad/server/project/server/json/PadSaver.scala
@@ -0,0 +1,21 @@
+package de.tobias.playpad.server.project.server.json
+
+import com.google.gson.{JsonElement, JsonObject}
+import de.tobias.playpad.server.project.Pad
+
+/**
+  * Created by tobias on 17.02.17.
+  */
+class PadSaver {
+
+	def save(pad: Pad): JsonElement = {
+		val jsonObject = new JsonObject()
+
+		jsonObject.addProperty("id", pad.id.toString)
+		jsonObject.addProperty("name", pad.name)
+		jsonObject.addProperty("position", pad.position)
+		jsonObject.addProperty("page", pad.pageIndex)
+
+		jsonObject
+	}
+}
diff --git a/src/main/scala/de/tobias/playpad/server/project/server/json/PageSaver.scala b/src/main/scala/de/tobias/playpad/server/project/server/json/PageSaver.scala
new file mode 100644
index 0000000..b97cc42
--- /dev/null
+++ b/src/main/scala/de/tobias/playpad/server/project/server/json/PageSaver.scala
@@ -0,0 +1,24 @@
+package de.tobias.playpad.server.project.server.json
+
+import com.google.gson.{JsonArray, JsonElement, JsonObject}
+import de.tobias.playpad.server.project.Page
+
+/**
+  * Created by tobias on 17.02.17.
+  */
+class PageSaver {
+
+	def save(page: Page): JsonElement = {
+		val jsonObject = new JsonObject()
+
+		val padSaver = new PadSaver()
+		val padArray = new JsonArray()
+		page.pads.foreach(pad => padArray.add(padSaver.save(pad)))
+
+		jsonObject.addProperty("name", page.name)
+		jsonObject.addProperty("position", page.position)
+		jsonObject.add("pads", padArray)
+
+		jsonObject
+	}
+}
diff --git a/src/main/scala/de/tobias/playpad/server/project/server/json/ProjectSaver.scala b/src/main/scala/de/tobias/playpad/server/project/server/json/ProjectSaver.scala
new file mode 100644
index 0000000..18e88a5
--- /dev/null
+++ b/src/main/scala/de/tobias/playpad/server/project/server/json/ProjectSaver.scala
@@ -0,0 +1,23 @@
+package de.tobias.playpad.server.project.server.json
+
+import com.google.gson.{JsonArray, JsonObject}
+import de.tobias.playpad.server.project.Project
+
+/**
+  * Created by tobias on 17.02.17.
+  */
+class ProjectSaver {
+
+	def save(project: Project): JsonObject = {
+		val jsonObject = new JsonObject()
+
+		val pageSaver = new PageSaver()
+		val pageArray = new JsonArray
+		project.pages.foreach(page => pageArray.add(pageSaver.save(page)))
+
+		jsonObject.addProperty("name", project.name)
+		jsonObject.add("pages", pageArray)
+
+		jsonObject
+	}
+}
-- 
GitLab