diff --git a/Server/src/Persistence/Database.java b/Server/src/Persistence/Database.java deleted file mode 100644 index 42bfeca962a793f8b0c8b8f5cb1527dba81b6ece..0000000000000000000000000000000000000000 --- a/Server/src/Persistence/Database.java +++ /dev/null @@ -1,22 +0,0 @@ -package Persistence; - -public class Database { - - /** - * Load or create sqLite database - */ - public void setup() { - } - - /** - * Create new database - */ - private void createDatabase() { - } - - /** - * Backup database - */ - public void backupDatabase() { - } -} diff --git a/build.gradle b/build.gradle index e722a74f04aee9c09272aeb3a39923bbde76e776..2d51019a0cfe8c942b0f175ec3695c18ee1d0469 100644 --- a/build.gradle +++ b/build.gradle @@ -57,6 +57,17 @@ project(":core") { dependencies { api "com.badlogicgames.gdx:gdx:$gdxVersion" - + + // lombok + compileOnly 'org.projectlombok:lombok:1.18.12' + annotationProcessor 'org.projectlombok:lombok:1.18.12' + + // h2 database + runtimeOnly 'com.h2database:h2' + + // ormlite + compile group: 'com.j256.ormlite', name: 'ormlite-jdbc', version: '4.48' + compile 'com.j256.ormlite:ormlite-android:4.48' + compile 'com.j256.ormlite:ormlite-core:4.48' } } diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Crew/Crew.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Crew/Crew.java index 071789ef862d36f8840d587b2268d8465f91fef5..8bdbafa2740672793acce8d8c1fcab350c84111d 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Crew/Crew.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Crew/Crew.java @@ -1,8 +1,42 @@ package com.galaxytrucker.galaxytruckerreloaded.Model.Crew; +import com.j256.ormlite.field.DatabaseField; +import com.j256.ormlite.table.DatabaseTable; +import lombok.*; + +@Getter +@Setter +@NoArgsConstructor(access = AccessLevel.PUBLIC) +@RequiredArgsConstructor(access = AccessLevel.PUBLIC) +@DatabaseTable(tableName = "crew") public class Crew { + + /** + * ID + */ + @DatabaseField(id = true, columnName = "ID") + @NonNull + private int id; + + /** + * Name + */ + @DatabaseField(columnName = "name") + @NonNull private String name; + + /** + * Health + */ + @DatabaseField(columnName = "health") + @NonNull private int health; + + /** + * Max health + */ + @DatabaseField(columnName = "maxhealth") + @NonNull private int maxhealth; /** @@ -10,38 +44,7 @@ public class Crew { * Das Array besteht aus * [Weapon, Shield, Engine, Repair, Combat] */ + @DatabaseField(columnName = "stats") + @NonNull private int[] stats; - - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public int getHealth() { - return health; - } - - public void setHealth(int health) { - this.health = health; - } - - public int getMaxhealth() { - return maxhealth; - } - - public void setMaxhealth(int maxhealth) { - this.maxhealth = maxhealth; - } - - public int[] getStats() { - return stats; - } - - public void setStats(int[] stats) { - this.stats = stats; - } } diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Planet/Planet.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Planet/Planet.java index c175c08b15f923ce695547c80a2aee9f990000f4..74efee93c43e483a73fd8e3422a19801349c7cd1 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Planet/Planet.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Planet/Planet.java @@ -1,13 +1,33 @@ package com.galaxytrucker.galaxytruckerreloaded.Model.Planet; -public abstract class Planet { +import com.j256.ormlite.field.DatabaseField; +import lombok.*; + +import java.io.Serializable; + +@NoArgsConstructor(access = AccessLevel.PUBLIC) +@RequiredArgsConstructor(access = AccessLevel.PUBLIC) +@Getter +@Setter +public abstract class Planet implements Serializable { /** Planet name */ + @DatabaseField(id = true,columnName = "name") + @NonNull private String name; + /** Horizontale Position auf der Karte */ + @DatabaseField(columnName = "posX") + @NonNull private float posX; + /** Vertikale Position auf der Karte */ + @DatabaseField(columnName = "posY") + @NonNull private float posY; + /** Ereignis dass auf diesem Planeten eintrifft */ + @DatabaseField(columnName = "event") + @NonNull private PlanetEvent event; } diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Ship.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Ship.java index c042567c5d4a9cc47aa89419147065ecd5b24366..ac04de8de12024dd50c3026375163a83e6bf4cc6 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Ship.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Ship.java @@ -1,15 +1,38 @@ package com.galaxytrucker.galaxytruckerreloaded.Model; -public class Ship { +import com.j256.ormlite.field.DatabaseField; +import com.j256.ormlite.table.DatabaseTable; +import lombok.*; + +import java.io.Serializable; + +@AllArgsConstructor(access = AccessLevel.PUBLIC) +@NoArgsConstructor(access = AccessLevel.PUBLIC) +@Getter +@Setter +@DatabaseTable(tableName = "ship") +public class Ship implements Serializable { + + /** + * The user this ship belongs to + * (uses the user's username) + */ + @DatabaseField(columnName = "ID", id = true) + @NonNull + private String associatedUser; /** * HP */ + @NonNull + @DatabaseField(columnName = "HP") private int hp; /** * Shields */ + @NonNull + @DatabaseField(columnName = "SHIELDS") private int shields; /** diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/Engine.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/Engine.java index 0fc06848bbb3bce91a1f33ef084cbd7c5bc0e4fa..6560f78eec82348d46b0834909ad398d254a9f3b 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/Engine.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/Engine.java @@ -1,6 +1,22 @@ package com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout; -public class Engine extends System { - /** Ob ein Crewmitglied das System stärkt */ - private boolean manned; +import com.j256.ormlite.field.DatabaseField; +import com.j256.ormlite.table.DatabaseTable; +import lombok.*; + +import java.io.Serializable; + +@NoArgsConstructor(access = AccessLevel.PUBLIC) +@RequiredArgsConstructor(access = AccessLevel.PUBLIC) +@Getter +@Setter +@DatabaseTable(tableName = "engine") +public class Engine extends System implements Serializable { + + /** + * Ob ein Crew mitglied das System stärkt + */ + @DatabaseField(columnName = "manned") + @NonNull + private boolean manned = false; } diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/Room.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/Room.java index 94c8d5117743e5d4c83109e4859a0d42b84145b1..7a1e3f05f64bdb4df39b1741450e2ba9f2f64ed3 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/Room.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/Room.java @@ -1,24 +1,49 @@ package com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout; -public abstract class Room { +import com.j256.ormlite.field.DatabaseField; +import lombok.*; + +import java.io.Serializable; + +@NoArgsConstructor(access = AccessLevel.PUBLIC) +@RequiredArgsConstructor(access = AccessLevel.PUBLIC) +@Getter +@Setter +public abstract class Room implements Serializable { + + /** + * ID + */ + @DatabaseField(columnName = "ID", id = true) + @NonNull + private int id; + /** * Höhe des Raumes. Räume sind immer rechteckig. */ + @DatabaseField(columnName = "height") + @NonNull private int height; /** * Weite des Raumes. Räume sind immer rechteckig. */ + @DatabaseField(columnName = "width") + @NonNull private int width; /** * Wenn ein Raum Schaden kriegt kann ein Loch entstehen. * Die Zahl ist der Wert wie lange dieses repariert werden muss um geschlossen zu werden. */ + @DatabaseField(columnName = "breach") + @NonNull private int breach; /** * Der Sauerstoffgehalt des Raumes */ + @DatabaseField(columnName = "oxygen") + @NonNull private int oxygen; } diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/Shield.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/Shield.java index 60f1506337d8aa0d664e59ac72149a22fa18b415..05e1d6a5d31ca566aac66dd35f8fa3f75b082dd1 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/Shield.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/Shield.java @@ -1,7 +1,23 @@ package com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout; -public class Shield extends System { - /** Ob ein Crewmitglied das System stärkt */ - private boolean manned; +import com.j256.ormlite.field.DatabaseField; +import com.j256.ormlite.table.DatabaseTable; +import lombok.*; + +import java.io.Serializable; + +@Getter +@Setter +@RequiredArgsConstructor(access = AccessLevel.PUBLIC) +@NoArgsConstructor(access = AccessLevel.PUBLIC) +@DatabaseTable(tableName = "shield") +public class Shield extends System implements Serializable { + + /** + * Ob ein Crewmitglied das System stärkt + */ + @DatabaseField(columnName = "manned") + @NonNull + private boolean manned = false; } diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/System.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/System.java index 5646eea88580175b11b70c371a966d621a0c11dd..1d4ba5a9d4bf1b1e878c2db2d1ca29af1288995e 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/System.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/System.java @@ -1,7 +1,41 @@ package com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout; -public abstract class System extends Room { +import com.j256.ormlite.field.DatabaseField; +import lombok.*; + +import java.io.Serializable; + +@Getter +@Setter +@RequiredArgsConstructor(access = AccessLevel.PUBLIC) +@NoArgsConstructor(access = AccessLevel.PUBLIC) +public abstract class System extends Room implements Serializable { + + /** + * ID + */ + @DatabaseField(columnName = "ID", id = true) + @NonNull + private int id; + + /** + * A system's energy level + */ + @DatabaseField(columnName = "energy") + @NonNull private int energy; + + /** + * Maximum energy a system can take + */ + @DatabaseField(columnName = "maxEnergy") + @NonNull private int maxEnergy; + + /** + * Damage the system has taken + */ + @DatabaseField(columnName = "damage") + @NonNull private int damage; } diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/User.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/User.java new file mode 100644 index 0000000000000000000000000000000000000000..f25c27075476eeb8aab5107b3a165b456032bff6 --- /dev/null +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/User.java @@ -0,0 +1,24 @@ +package com.galaxytrucker.galaxytruckerreloaded.Model; + +import com.j256.ormlite.field.DatabaseField; +import com.j256.ormlite.table.DatabaseTable; +import lombok.*; + +import java.io.Serializable; + +@RequiredArgsConstructor(access = AccessLevel.PUBLIC) +@NoArgsConstructor(access = AccessLevel.PUBLIC) +@Getter +@Setter +@DatabaseTable(tableName = "USER") +public class User implements Serializable { + + /** Username */ + @DatabaseField(id = true,columnName = "USERNAME") + @NonNull + private String username; + + /** The user's ship */ + @DatabaseField(columnName = "userShip", foreign = true) + private Ship userShip; +} diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Database/Database.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Database/Database.java new file mode 100644 index 0000000000000000000000000000000000000000..40393491f72a18ff151c9ce27014462d738cde97 --- /dev/null +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Database/Database.java @@ -0,0 +1,48 @@ +package com.galaxytrucker.galaxytruckerreloaded.Server.Database; + +import com.galaxytrucker.galaxytruckerreloaded.Model.User; +import com.j256.ormlite.dao.Dao; +import com.j256.ormlite.dao.DaoManager; +import com.j256.ormlite.jdbc.JdbcConnectionSource; +import com.j256.ormlite.support.ConnectionSource; +import com.j256.ormlite.table.TableUtils; +import lombok.*; + +@Getter +@NoArgsConstructor(access = AccessLevel.PACKAGE) +public class Database { + + /** + * Database connection source + */ + private ConnectionSource source; + + /** + * Load or create h2 database + */ + public void setup() { + String url = "jdbc:h2:./database"; + try { + source = new JdbcConnectionSource(url); + Dao<User, String> userDao = DaoManager.createDao(source, User.class); + try { + TableUtils.createTable(source, User.class); + } catch (Exception f) { + f.printStackTrace(); + } + User u = new User("test"); + userDao.create(u); + User user2 = userDao.queryForId("test"); + System.out.println(user2.getUsername()); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * Backup database + */ + public void backupDatabase() { + + } +} diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/ObjectDAO.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/ObjectDAO.java new file mode 100644 index 0000000000000000000000000000000000000000..1ef30c8a12d43a044e6cd0e73e9944474fce93e0 --- /dev/null +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/ObjectDAO.java @@ -0,0 +1,19 @@ +package com.galaxytrucker.galaxytruckerreloaded.Server.Persistence; + +/** Template for DAOs */ +public abstract class ObjectDAO<T> { + + /** + * Save the object to the database + * + * @param o - the object to save + */ + public abstract void persist(T o); + + /** + * Remove an object from the database + * + * @param o - the object to remove + */ + public abstract void remove(T o); +} diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/ShipDAO.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/ShipDAO.java new file mode 100644 index 0000000000000000000000000000000000000000..6abe9552b1357df463b6427a981f349eadf2f21a --- /dev/null +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/ShipDAO.java @@ -0,0 +1,55 @@ +package com.galaxytrucker.galaxytruckerreloaded.Server.Persistence; + +import com.galaxytrucker.galaxytruckerreloaded.Model.Ship; +import com.j256.ormlite.dao.Dao; +import com.j256.ormlite.support.ConnectionSource; + +public class ShipDAO extends ObjectDAO<Ship> { + + /** + * Database connection source + */ + private ConnectionSource source; + + /** + * ShipDAO + */ + private Dao<Ship, String> shipDAO; + + /** + * Constructor + * + * @param source - the database connection source + */ + public ShipDAO(ConnectionSource source) { + + } + + + /** + * Add a new ship to the database + * + * @param s - the ship to add + */ + public void persist(Ship s) { + + } + + /** + * Get a ship from the database using its associated user + * + * @param user - the ship's associated user + */ + private Ship getShipByUser(String user) { + return null; + } + + /** + * Remove a ship from the database + * + * @param s - the ship to remove + */ + public void remove(Ship s) { + + } +} diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/UserDAO.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/UserDAO.java new file mode 100644 index 0000000000000000000000000000000000000000..2cddac2951ce3a5e3aefaf7d99a9aa79a80489b3 --- /dev/null +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/UserDAO.java @@ -0,0 +1,64 @@ +package com.galaxytrucker.galaxytruckerreloaded.Server.Persistence; + +import com.galaxytrucker.galaxytruckerreloaded.Model.User; +import com.j256.ormlite.dao.Dao; +import com.j256.ormlite.support.ConnectionSource; + +public class UserDAO extends ObjectDAO<User> { + + /** + * Database connection source + */ + private ConnectionSource source; + + /** + * UserDAO + */ + private Dao<User, String> userDao; + + /** + * Constructor + * + * @param source - database connection source + */ + public UserDAO(ConnectionSource source) { + + } + + /** + * Add a new user to the database + * + * @param u - the user to add + */ + public void persist(User u) { + + } + + /** + * Get a user from the database using his username + * + * @param username - the username of the user + */ + private User getUserByUsername(String username) { + return null; + } + + /** + * Remove a user from the database + * + * @param u - the user to delete + */ + public void remove(User u) { + + } + + /** + * Remove a user using his username + * + * @param username - the username of the user to delete + */ + private void removeUserByUsername(String username) { + + } + +} diff --git a/Server/src/Server.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Server.java similarity index 64% rename from Server/src/Server.java rename to core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Server.java index 26d6ee239d5bff5cb13d31da4ff1c58efd2ece19..e2dad86f390d001de54b98619e083cbd5966dbb4 100644 --- a/Server/src/Server.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Server.java @@ -1,10 +1,15 @@ -import Persistence.Database; +package com.galaxytrucker.galaxytruckerreloaded.Server; + +import com.galaxytrucker.galaxytruckerreloaded.Server.Database.Database; /** * This class creates the game server and handles storing the data */ public class Server { + /** The database */ + private Database database; + /** * Start the server */ @@ -30,9 +35,9 @@ public class Server { } /** - * Current database + * Initialize database */ - private Database currentDatabase() { - return null; + private void initializeDatabase() { + } } diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Services/ShipService.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Services/ShipService.java new file mode 100644 index 0000000000000000000000000000000000000000..9fb830675c95f104329ee4a4a100ad7271fc4519 --- /dev/null +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Services/ShipService.java @@ -0,0 +1,48 @@ +package com.galaxytrucker.galaxytruckerreloaded.Server.Services; + +import com.galaxytrucker.galaxytruckerreloaded.Model.Ship; +import com.galaxytrucker.galaxytruckerreloaded.Model.User; +import com.galaxytrucker.galaxytruckerreloaded.Server.Persistence.ShipDAO; +import com.j256.ormlite.support.ConnectionSource; + +public class ShipService { + + /** + * The DAO used by the service + */ + private ShipDAO shipDAO; + + /** + * Add a new ship to the database + * + * @param s - the ship to add + */ + public void addShip(Ship s) { + } + + /** + * Fetch a ship from the database using the user associated to it + * + * @param u - the user associated to the ship + */ + public User getShipByUser(User u) { + return null; + } + + /** + * Remove a ship from the database + * + * @param s - the ship to remove from the database + */ + public void removeShip(Ship s) { + } + + /** + * Constructor + * + * @param source - the database connection source + */ + public ShipService(ConnectionSource source) { + } + +} diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Services/UserService.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Services/UserService.java new file mode 100644 index 0000000000000000000000000000000000000000..2a27c02edb6a385a94eba376f7c36c526627e7ad --- /dev/null +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Services/UserService.java @@ -0,0 +1,57 @@ +package com.galaxytrucker.galaxytruckerreloaded.Server.Services; + +import com.galaxytrucker.galaxytruckerreloaded.Model.User; +import com.galaxytrucker.galaxytruckerreloaded.Server.Persistence.UserDAO; +import com.j256.ormlite.support.ConnectionSource; + +public class UserService { + + /** + * The userDAO used to store and fetch data + */ + private UserDAO userDAO; + + /** + * add a new user to the database + * + * @param user - the user to add + */ + public void addUser(User user) { + } + + /** + * Fetch a user from the database + * + * @param username - the username of the user to fetch + */ + public User getUser(String username) { + return null; + } + + /** + * Remove a user from the database + * + * @param u - the user to remove + */ + public void removeUser(User u) { + + } + + /** + * Remove a user using his username + * + * @param username - the username of the user to remove + */ + public void removeUserByUsername(String username) { + } + + /** + * Constructor + * + * @param source - the database connections source + */ + public UserService(ConnectionSource source) { + + } + +}