From dcb4b67d04152e71381be146b98651f99f0e5978 Mon Sep 17 00:00:00 2001
From: Eirik Steira <eirsteir@stud.ntnu.no>
Date: Fri, 13 Mar 2020 21:53:02 +0100
Subject: [PATCH 1/4] Integrate Hibernate and add some test repositories

---
 pom.xml                                       | 72 ++++++++++++++-----
 src/main/java/NTNU/IDATT1002/App.java         | 27 +++++--
 .../NTNU/IDATT1002/database/DBConnection.java | 33 ---------
 .../java/NTNU/IDATT1002/models/Login.java     | 27 ++++---
 .../IDATT1002/repository/LoginRepository.java | 35 +++++++++
 src/main/resources/META-INF/persistence.xml   | 29 ++++++++
 stale_outputs_checked                         |  0
 7 files changed, 158 insertions(+), 65 deletions(-)
 delete mode 100644 src/main/java/NTNU/IDATT1002/database/DBConnection.java
 create mode 100644 src/main/java/NTNU/IDATT1002/repository/LoginRepository.java
 create mode 100644 src/main/resources/META-INF/persistence.xml
 delete mode 100644 stale_outputs_checked

diff --git a/pom.xml b/pom.xml
index 16558d8b..7df9c741 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,53 +5,87 @@
     <artifactId>ImageApplication</artifactId>
     <version>1.0-SNAPSHOT</version>
     <properties>
+        <java.version>11</java.version>
+        <hibernate.version>5.3.6.Final</hibernate.version>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <maven.compiler.source>11</maven.compiler.source>
-        <maven.compiler.target>11</maven.compiler.target>
+        <maven.compiler.source>${java.version}</maven.compiler.source>
+        <maven.compiler.target>${java.version}</maven.compiler.target>
     </properties>
     <dependencies>
+
+        <!-- Hibernate -->
+        <dependency>
+            <groupId>org.hibernate</groupId>
+            <artifactId>hibernate-entitymanager</artifactId>
+            <version>${hibernate.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.hibernate</groupId>
+            <artifactId>hibernate-core</artifactId>
+            <version>${hibernate.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.hibernate.javax.persistence</groupId>
+            <artifactId>hibernate-jpa-2.1-api</artifactId>
+            <version>1.0.2.Final</version>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.xml.bind</groupId>
+            <artifactId>jaxb-api</artifactId>
+            <version>2.3.0</version>
+        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>org.glassfish.jaxb</groupId>-->
+<!--            <artifactId>jaxb-runtime</artifactId>-->
+<!--            <version>2.3.0.1</version>-->
+<!--        </dependency>-->
+
+        <!-- Logging -->
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-simple</artifactId>
-            <version>1.7.30</version>
+            <artifactId>slf4j-log4j12</artifactId>
+            <version>1.7.5</version>
         </dependency>
+
+        <!-- Javafx + fxml -->
         <dependency>
             <groupId>org.openjfx</groupId>
             <artifactId>javafx-controls</artifactId>
             <version>13</version>
         </dependency>
-        <dependency>
-            <groupId>mysql</groupId>
-            <artifactId>mysql-connector-java</artifactId>
-            <version>8.0.19</version>
-        </dependency>
         <dependency>
             <groupId>org.openjfx</groupId>
             <artifactId>javafx-fxml</artifactId>
             <version>13</version>
         </dependency>
+
+        <!-- MySQL Driver -->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <version>8.0.19</version>
+        </dependency>
+
+        <!-- Metadata -->
         <dependency>
             <groupId>com.drewnoakes</groupId>
             <artifactId>metadata-extractor</artifactId>
             <version>2.13.0</version>
         </dependency>
+
+        <!-- Testing -->
         <dependency>
             <groupId>org.junit.jupiter</groupId>
             <artifactId>junit-jupiter</artifactId>
-            <version>RELEASE</version>
-            <scope>test</scope>
+            <version>5.6.0</version>
         </dependency>
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
-            <version>RELEASE</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>com.zaxxer</groupId>
-            <artifactId>HikariCP</artifactId>
-            <version>3.4.2</version>
+            <version>4.13</version>
         </dependency>
+
     </dependencies>
     <build>
         <plugins>
@@ -60,7 +94,7 @@
                 <artifactId>maven-compiler-plugin</artifactId>
                 <version>3.8.0</version>
                 <configuration>
-                    <release>11</release>
+                    <release>${java.version}</release>
                 </configuration>
             </plugin>
             <plugin>
diff --git a/src/main/java/NTNU/IDATT1002/App.java b/src/main/java/NTNU/IDATT1002/App.java
index 5072c677..b86222a8 100644
--- a/src/main/java/NTNU/IDATT1002/App.java
+++ b/src/main/java/NTNU/IDATT1002/App.java
@@ -1,23 +1,42 @@
 package NTNU.IDATT1002;
 
-import NTNU.IDATT1002.database.DBConnection;
+import NTNU.IDATT1002.models.Login;
+import NTNU.IDATT1002.repository.LoginRepository;
 import javafx.application.Application;
 import javafx.fxml.FXMLLoader;
 import javafx.scene.Parent;
 import javafx.scene.Scene;
 import javafx.stage.Stage;
+import org.slf4j.Logger;
 
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 import java.io.IOException;
+import java.util.Optional;
+
 
 public class App extends Application {
 
     private static Scene scene;
 
+    private static Logger log;
+
     @Override
     public void start(Stage stage) throws IOException {
-        scene = new Scene(loadFXML("login"));
-        stage.setScene(scene);
-        stage.show();
+//        scene = new Scene(loadFXML("login"));
+//        stage.setScene(scene);
+//        stage.show();
+
+        // Create our entity manager
+        EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("ImageApplication");
+        EntityManager entityManager = entityManagerFactory.createEntityManager();
+        // Create our repositories
+        LoginRepository loginRepository = new LoginRepository(entityManager);
+        // Create an author and add 3 books to his list of books
+        Login login = new Login(20011L, "padds", "hash", "salt");
+        Optional<Login> savedAuthor = loginRepository.save(login);
+        savedAuthor.ifPresent(System.out::println);
     }
 
     public static void setRoot(String fxml) throws IOException {
diff --git a/src/main/java/NTNU/IDATT1002/database/DBConnection.java b/src/main/java/NTNU/IDATT1002/database/DBConnection.java
deleted file mode 100644
index 294643e1..00000000
--- a/src/main/java/NTNU/IDATT1002/database/DBConnection.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package NTNU.IDATT1002.database;
-
-import com.zaxxer.hikari.HikariConfig;
-import com.zaxxer.hikari.HikariDataSource;
-
-import java.sql.Connection;
-import java.sql.SQLException;
-
-/**
- * Class for connecting to the database. This will load configurations and create a connection pool.
-*/
-public class DBConnection {
-
-    private static HikariDataSource dataSource;
-
-    /**
-     * Load configuration and setup the data source
-     */
-    static{
-        HikariConfig config = new HikariConfig("datasource.properties" );
-        dataSource = new HikariDataSource(config);
-    }
-
-    /**
-     * Establish a connection pool to the database
-     *
-     * @return Connection to the database
-     * @throws SQLException
-     */
-    public static Connection getConnection() throws SQLException {
-        return dataSource.getConnection();
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/NTNU/IDATT1002/models/Login.java b/src/main/java/NTNU/IDATT1002/models/Login.java
index 02f9a9aa..edf473e1 100644
--- a/src/main/java/NTNU/IDATT1002/models/Login.java
+++ b/src/main/java/NTNU/IDATT1002/models/Login.java
@@ -1,9 +1,18 @@
 package NTNU.IDATT1002.models;
 
-public class Login {
 
-    private Integer id;
-    private User user;
+import javax.persistence.*;
+
+@Entity
+@Table
+@NamedQueries({
+        @NamedQuery(name = "Login.findById",
+                query = "SELECT a FROM Login a WHERE a.id = :id")
+})public class Login {
+
+    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+//    private User user;
     private String password;
     private String passwordHash;
     private String passwordSalt;
@@ -11,21 +20,21 @@ public class Login {
     public Login() {
     }
 
-    public Login(int id, User user, String password, String passwordHash, String passwordSalt) {
+    public Login(Long id, String password, String passwordHash, String passwordSalt) {
         this.id = id;
-        this.user = user;
+//        this.user = user;
         this.password = password;
         this.passwordHash = passwordHash;
         this.passwordSalt = passwordSalt;
     }
 
-    public int getId() {
+    public Long getId() {
         return id;
     }
 
-    public User getUser() {
-        return user;
-    }
+//    public User getUser() {
+//        return user;
+//    }
 
     public String getPassword() {
         return password;
diff --git a/src/main/java/NTNU/IDATT1002/repository/LoginRepository.java b/src/main/java/NTNU/IDATT1002/repository/LoginRepository.java
new file mode 100644
index 00000000..0fc9dbce
--- /dev/null
+++ b/src/main/java/NTNU/IDATT1002/repository/LoginRepository.java
@@ -0,0 +1,35 @@
+package NTNU.IDATT1002.repository;
+
+
+import NTNU.IDATT1002.models.Login;
+
+import javax.persistence.EntityManager;
+        import java.util.List;
+        import java.util.Optional;
+
+public class LoginRepository {
+    private EntityManager entityManager;
+    public LoginRepository(EntityManager entityManager) {
+        this.entityManager = entityManager;
+    }
+
+    public Optional<Login> findById(Integer id) {
+        Login book = entityManager.find(Login.class, id);
+        return book != null ? Optional.of(book) : Optional.empty();
+    }
+    public List<Login> findAll() {
+        return entityManager.createQuery("from Login").getResultList();
+    }
+
+    public Optional<Login> save(Login book) {
+        try {
+            entityManager.getTransaction().begin();
+            entityManager.persist(book);
+            entityManager.getTransaction().commit();
+            return Optional.of(book);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return Optional.empty();
+    }
+}
\ No newline at end of file
diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml
new file mode 100644
index 00000000..48bca313
--- /dev/null
+++ b/src/main/resources/META-INF/persistence.xml
@@ -0,0 +1,29 @@
+<persistence xmlns="http://java.sun.com/xml/ns/persistence"
+             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
+             version="2.0">
+
+    <persistence-unit name="ImageApplication" transaction-type="RESOURCE_LOCAL">
+        <!-- Persistence provider -->
+        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
+
+        <!-- Entity classes -->
+        <class>NTNU.IDATT1002.models.Login</class>
+
+        <properties>
+            <!-- Configuring JDBC properties -->
+            <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver" />
+            <property name="javax.persistence.jdbc.url"    value="jdbc:mysql://db-mysql-lon1-07155-do-user-7212587-0.a.db.ondigitalocean.com:25060/image_application" />
+            <property name="javax.persistence.jdbc.user" value="doadmin" />
+            <property name="javax.persistence.jdbc.password" value="s4oxtqu20e8r7tx5" />
+
+            <!-- Hibernate properties -->
+            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL8Dialect"/>
+            <property name="hibernate.hbm2ddl.auto" value="update" />
+            <property name="show_sql" value="true"/>
+            <property name="hibernate.temp.use_jdbc_metadata_defaults" value="false"/>
+            <property name="hibernate.format_sql" value="true"/>
+            <property name="hibernate.use_sql_comments" value="true"/>
+        </properties>
+    </persistence-unit>
+</persistence>
\ No newline at end of file
diff --git a/stale_outputs_checked b/stale_outputs_checked
deleted file mode 100644
index e69de29b..00000000
-- 
GitLab


From 4edc987dae526ccb70d929339407cd1e34eb6648 Mon Sep 17 00:00:00 2001
From: Eirik Steira <eirsteir@stud.ntnu.no>
Date: Sat, 14 Mar 2020 14:23:42 +0100
Subject: [PATCH 2/4] Add basic setup for LoginRepository

---
 src/main/java/NTNU/IDATT1002/App.java         | 18 +---
 .../java/NTNU/IDATT1002/models/Login.java     | 38 +++----
 src/main/java/NTNU/IDATT1002/models/User.java | 23 ++---
 .../IDATT1002/repository/LoginRepository.java | 52 ++++++++--
 .../NTNU/IDATT1002/repository/Repository.java | 17 ++--
 .../IDATT1002/repository/UserRepository.java  | 99 -------------------
 src/main/resources/META-INF/persistence.xml   |  5 +-
 7 files changed, 85 insertions(+), 167 deletions(-)
 delete mode 100644 src/main/java/NTNU/IDATT1002/repository/UserRepository.java

diff --git a/src/main/java/NTNU/IDATT1002/App.java b/src/main/java/NTNU/IDATT1002/App.java
index b86222a8..3ea184e7 100644
--- a/src/main/java/NTNU/IDATT1002/App.java
+++ b/src/main/java/NTNU/IDATT1002/App.java
@@ -1,6 +1,5 @@
 package NTNU.IDATT1002;
 
-import NTNU.IDATT1002.models.Login;
 import NTNU.IDATT1002.repository.LoginRepository;
 import javafx.application.Application;
 import javafx.fxml.FXMLLoader;
@@ -13,7 +12,6 @@ import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
 import javax.persistence.Persistence;
 import java.io.IOException;
-import java.util.Optional;
 
 
 public class App extends Application {
@@ -24,19 +22,9 @@ public class App extends Application {
 
     @Override
     public void start(Stage stage) throws IOException {
-//        scene = new Scene(loadFXML("login"));
-//        stage.setScene(scene);
-//        stage.show();
-
-        // Create our entity manager
-        EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("ImageApplication");
-        EntityManager entityManager = entityManagerFactory.createEntityManager();
-        // Create our repositories
-        LoginRepository loginRepository = new LoginRepository(entityManager);
-        // Create an author and add 3 books to his list of books
-        Login login = new Login(20011L, "padds", "hash", "salt");
-        Optional<Login> savedAuthor = loginRepository.save(login);
-        savedAuthor.ifPresent(System.out::println);
+        scene = new Scene(loadFXML("login"));
+        stage.setScene(scene);
+        stage.show();
     }
 
     public static void setRoot(String fxml) throws IOException {
diff --git a/src/main/java/NTNU/IDATT1002/models/Login.java b/src/main/java/NTNU/IDATT1002/models/Login.java
index edf473e1..53871172 100644
--- a/src/main/java/NTNU/IDATT1002/models/Login.java
+++ b/src/main/java/NTNU/IDATT1002/models/Login.java
@@ -4,46 +4,36 @@ package NTNU.IDATT1002.models;
 import javax.persistence.*;
 
 @Entity
-@Table
-@NamedQueries({
-        @NamedQuery(name = "Login.findById",
-                query = "SELECT a FROM Login a WHERE a.id = :id")
-})public class Login {
-
-    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-//    private User user;
+@Table(name = "login")
+public class Login {
+
+    @Id
+    private String username;
+
+    @OneToOne
+    @JoinColumn(name = "username", referencedColumnName = "username")
+    private User user;
+
     private String password;
-    private String passwordHash;
     private String passwordSalt;
 
     public Login() {
     }
 
-    public Login(Long id, String password, String passwordHash, String passwordSalt) {
-        this.id = id;
-//        this.user = user;
+    public Login(User user, String password, String passwordSalt) {
+        this.user = user;
         this.password = password;
-        this.passwordHash = passwordHash;
         this.passwordSalt = passwordSalt;
     }
 
-    public Long getId() {
-        return id;
+    public User getUser() {
+        return user;
     }
 
-//    public User getUser() {
-//        return user;
-//    }
-
     public String getPassword() {
         return password;
     }
 
-    public String getPasswordHash() {
-        return passwordHash;
-    }
-
     public String getPasswordSalt() {
         return passwordSalt;
     }
diff --git a/src/main/java/NTNU/IDATT1002/models/User.java b/src/main/java/NTNU/IDATT1002/models/User.java
index eb2eea20..33b7cd66 100644
--- a/src/main/java/NTNU/IDATT1002/models/User.java
+++ b/src/main/java/NTNU/IDATT1002/models/User.java
@@ -1,12 +1,16 @@
 package NTNU.IDATT1002.models;
 
+import javax.persistence.*;
 import java.util.Date;
 
+@Entity
+@Table(name = "user")
 public class User {
 
-    private Integer id;
-    private String email;
+    @Id
     private String username;
+
+    private String email;
     private String firstName;
     private String lastName;
     private String callingCode;
@@ -15,8 +19,10 @@ public class User {
     private boolean isAdmin;
     private boolean isActive;
 
-    public User(int id, String email, String username, String firstName, String lastName, String callingCode, String phoneNumber, Date birthDate, boolean isAdmin) {
-        this.id = id;
+    public User() {
+    }
+
+    public User(String email, String username, String firstName, String lastName, String callingCode, String phoneNumber, Date birthDate, boolean isAdmin) {
         this.email = email;
         this.username = username;
         this.firstName = firstName;
@@ -29,8 +35,7 @@ public class User {
     }
 
     public User(User user) {
-        this(user.getId(),
-                user.getEmail(),
+        this(user.getEmail(),
                 user.getUsername(),
                 user.getFirstName(),
                 user.getLastName(),
@@ -40,10 +45,6 @@ public class User {
                 user.isAdmin());
     }
 
-    public Integer getId() {
-        return id;
-    }
-
     public String getEmail() {
         return email;
     }
@@ -85,6 +86,6 @@ public class User {
         if (this == o) return true;
         if (o == null || getClass() != o.getClass()) return false;
         User user = (User) o;
-        return id.equals(user.id);
+        return username.equals(user.username);
     }
 }
diff --git a/src/main/java/NTNU/IDATT1002/repository/LoginRepository.java b/src/main/java/NTNU/IDATT1002/repository/LoginRepository.java
index 0fc9dbce..22460df0 100644
--- a/src/main/java/NTNU/IDATT1002/repository/LoginRepository.java
+++ b/src/main/java/NTNU/IDATT1002/repository/LoginRepository.java
@@ -4,32 +4,66 @@ package NTNU.IDATT1002.repository;
 import NTNU.IDATT1002.models.Login;
 
 import javax.persistence.EntityManager;
-        import java.util.List;
-        import java.util.Optional;
+import java.util.List;
+import java.util.Optional;
+
+
+public class LoginRepository implements Repository<Login, String> {
 
-public class LoginRepository {
     private EntityManager entityManager;
+
     public LoginRepository(EntityManager entityManager) {
         this.entityManager = entityManager;
     }
 
-    public Optional<Login> findById(Integer id) {
-        Login book = entityManager.find(Login.class, id);
-        return book != null ? Optional.of(book) : Optional.empty();
+    public Optional<Login> findById(String id) {
+        Login login = entityManager.find(Login.class, id);
+        return login != null ? Optional.of(login) : Optional.empty();
     }
+
+    public Optional<Login> findByUsername(String username) {
+        return findById(username);
+    }
+
     public List<Login> findAll() {
         return entityManager.createQuery("from Login").getResultList();
     }
 
-    public Optional<Login> save(Login book) {
+    public Optional<Login> save(Login login) {
         try {
             entityManager.getTransaction().begin();
-            entityManager.persist(book);
+            entityManager.persist(login);
             entityManager.getTransaction().commit();
-            return Optional.of(book);
+            return Optional.of(login);
         } catch (Exception e) {
             e.printStackTrace();
         }
+
+        return Optional.empty();
+    }
+
+    public Optional<Login> update(Login login) {
         return Optional.empty();
     }
+
+    public void deleteById(String id) {
+
+    }
+
+    public void deleteByUsername(String username) {
+        deleteById(username);
+    }
+
+    public void delete(Login login) {
+
+    }
+
+    public long count() {
+        return 0;
+    }
+
+    public boolean exists(Login entity) {
+        return false;
+    }
+
 }
\ No newline at end of file
diff --git a/src/main/java/NTNU/IDATT1002/repository/Repository.java b/src/main/java/NTNU/IDATT1002/repository/Repository.java
index 326d682e..ac806fb9 100644
--- a/src/main/java/NTNU/IDATT1002/repository/Repository.java
+++ b/src/main/java/NTNU/IDATT1002/repository/Repository.java
@@ -1,5 +1,6 @@
 package NTNU.IDATT1002.repository;
 
+import java.util.List;
 import java.util.Optional;
 
 
@@ -16,7 +17,7 @@ public interface Repository<T, ID> {
      * @param entity not null
      * @return the saved entity
      */
-    T save(T entity) throws IllegalArgumentException;
+    Optional<T> save(T entity);
 
     /**
      * Updates the given entity. This will completely override the given instance.
@@ -31,7 +32,7 @@ public interface Repository<T, ID> {
      *
      * @return all entities
      */
-    Iterable<T> findAll();
+    List<T> findAll();
 
     /**
      * Retrieves an entity with the given id.
@@ -42,18 +43,18 @@ public interface Repository<T, ID> {
     Optional<T> findById(ID id);
 
     /**
-     * Deletes an entity with the given id.
+     * Deletes the given entity.
      *
-     * @param id not null
+     * @param entity not null
      */
-    void deleteById(ID id);
+    void delete(T entity);
 
     /**
-     * Deletes the given entity.
+     * Deletes an entity with the given id.
      *
-     * @param entity not null
+     * @param id not null
      */
-    void delete(T entity);
+    void deleteById(ID id);
 
     /**
      * Return the number of entities.
diff --git a/src/main/java/NTNU/IDATT1002/repository/UserRepository.java b/src/main/java/NTNU/IDATT1002/repository/UserRepository.java
deleted file mode 100644
index e6cb49d8..00000000
--- a/src/main/java/NTNU/IDATT1002/repository/UserRepository.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package NTNU.IDATT1002.repository;
-
-import NTNU.IDATT1002.models.User;
-
-import java.util.*;
-
-
-/**
- * User repository to support interacting with a simulated database.
- */
-public class UserRepository implements Repository<User, Integer> {
-
-    /**
-     * The "database".
-     */
-    private static List<User> users = new ArrayList<>();
-
-    /**
-     * Supply repository with initial test data.
-     */
-    static {
-        users.add(new User(1, "test@mail.com", "test", "Test", "Testesen", "+47", "00000000", new Date(), false));
-        users.add(new User(2, "test2@mail.com", "test2", "Test2", "Testesen2", "+47", "00000001", new Date(), false));
-        users.add(new User(3, "test3@mail.com", "test3", "Test3", "Testesen3", "+47", "00000002", new Date(), false));
-    }
-
-    @Override
-    public User save(User user) throws IllegalArgumentException {
-        if (user == null)
-            throw new IllegalArgumentException("User cannot be null");
-
-        User savedUser = new User(user);
-        users.add(savedUser);
-        return savedUser;
-    }
-
-    @Override
-    public Optional<User> update(User user) {
-        if (user == null)
-            throw new IllegalArgumentException("User cannot be null");
-
-        Optional<User> foundUser = users.stream()
-                .filter(user::equals)
-                .findFirst();
-
-        if (foundUser.isPresent()) {
-            delete(foundUser.get());
-            User updatedUser = save(user);
-            return Optional.of(updatedUser);
-        }
-
-        return Optional.empty();
-    }
-
-    @Override
-    public List<User> findAll() {
-        return users;
-    }
-
-    @Override
-    public Optional<User> findById(Integer id) {
-        return users.stream()
-                .filter(user -> user.getId() == id)
-                .findFirst();
-    }
-
-   public User findByUsername(String username) {
-        return users.stream()
-                .filter(user -> user.getUsername().equals(username))
-                .findFirst()
-                .orElseThrow(NoSuchElementException::new);
-    }
-
-    @Override
-    public void deleteById(Integer id) {
-        Optional<User> foundUser = findById(id);
-        foundUser.ifPresent(this::delete);
-    }
-
-    @Override
-    public void delete(User user) {
-        users.remove(user);
-    }
-
-
-    @Override
-    public long count() {
-        return users.size();
-    }
-
-    @Override
-    public boolean exists(User user) {
-        if (user == null)
-            throw new IllegalArgumentException("User cannot be null");
-
-        return users.stream()
-                .anyMatch(user::equals);
-    }
-}
diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml
index 48bca313..f088ef2a 100644
--- a/src/main/resources/META-INF/persistence.xml
+++ b/src/main/resources/META-INF/persistence.xml
@@ -9,6 +9,7 @@
 
         <!-- Entity classes -->
         <class>NTNU.IDATT1002.models.Login</class>
+        <class>NTNU.IDATT1002.models.User</class>
 
         <properties>
             <!-- Configuring JDBC properties -->
@@ -19,11 +20,13 @@
 
             <!-- Hibernate properties -->
             <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL8Dialect"/>
-            <property name="hibernate.hbm2ddl.auto" value="update" />
             <property name="show_sql" value="true"/>
             <property name="hibernate.temp.use_jdbc_metadata_defaults" value="false"/>
             <property name="hibernate.format_sql" value="true"/>
             <property name="hibernate.use_sql_comments" value="true"/>
+
+            <!-- Drop and create tables on startup -->
+            <property name="hibernate.hbm2ddl.auto" value="create-drop" />
         </properties>
     </persistence-unit>
 </persistence>
\ No newline at end of file
-- 
GitLab


From 20ce5135dac9cdc325e4a8436a9b649008b695a0 Mon Sep 17 00:00:00 2001
From: Eirik Steira <eirsteir@stud.ntnu.no>
Date: Sat, 14 Mar 2020 14:26:03 +0100
Subject: [PATCH 3/4] Add hibernate and logging config

---
 src/main/java/NTNU/IDATT1002/App.java         |  4 -
 .../java/NTNU/IDATT1002/models/Login.java     | 40 --------
 src/main/java/NTNU/IDATT1002/models/User.java | 91 -------------------
 .../IDATT1002/repository/LoginRepository.java | 69 --------------
 src/main/resources/META-INF/persistence.xml   |  2 -
 5 files changed, 206 deletions(-)
 delete mode 100644 src/main/java/NTNU/IDATT1002/models/Login.java
 delete mode 100644 src/main/java/NTNU/IDATT1002/models/User.java
 delete mode 100644 src/main/java/NTNU/IDATT1002/repository/LoginRepository.java

diff --git a/src/main/java/NTNU/IDATT1002/App.java b/src/main/java/NTNU/IDATT1002/App.java
index 3ea184e7..1a790773 100644
--- a/src/main/java/NTNU/IDATT1002/App.java
+++ b/src/main/java/NTNU/IDATT1002/App.java
@@ -1,6 +1,5 @@
 package NTNU.IDATT1002;
 
-import NTNU.IDATT1002.repository.LoginRepository;
 import javafx.application.Application;
 import javafx.fxml.FXMLLoader;
 import javafx.scene.Parent;
@@ -8,9 +7,6 @@ import javafx.scene.Scene;
 import javafx.stage.Stage;
 import org.slf4j.Logger;
 
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.Persistence;
 import java.io.IOException;
 
 
diff --git a/src/main/java/NTNU/IDATT1002/models/Login.java b/src/main/java/NTNU/IDATT1002/models/Login.java
deleted file mode 100644
index 53871172..00000000
--- a/src/main/java/NTNU/IDATT1002/models/Login.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package NTNU.IDATT1002.models;
-
-
-import javax.persistence.*;
-
-@Entity
-@Table(name = "login")
-public class Login {
-
-    @Id
-    private String username;
-
-    @OneToOne
-    @JoinColumn(name = "username", referencedColumnName = "username")
-    private User user;
-
-    private String password;
-    private String passwordSalt;
-
-    public Login() {
-    }
-
-    public Login(User user, String password, String passwordSalt) {
-        this.user = user;
-        this.password = password;
-        this.passwordSalt = passwordSalt;
-    }
-
-    public User getUser() {
-        return user;
-    }
-
-    public String getPassword() {
-        return password;
-    }
-
-    public String getPasswordSalt() {
-        return passwordSalt;
-    }
-}
diff --git a/src/main/java/NTNU/IDATT1002/models/User.java b/src/main/java/NTNU/IDATT1002/models/User.java
deleted file mode 100644
index 33b7cd66..00000000
--- a/src/main/java/NTNU/IDATT1002/models/User.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package NTNU.IDATT1002.models;
-
-import javax.persistence.*;
-import java.util.Date;
-
-@Entity
-@Table(name = "user")
-public class User {
-
-    @Id
-    private String username;
-
-    private String email;
-    private String firstName;
-    private String lastName;
-    private String callingCode;
-    private String phoneNumber;
-    private Date birthDate;
-    private boolean isAdmin;
-    private boolean isActive;
-
-    public User() {
-    }
-
-    public User(String email, String username, String firstName, String lastName, String callingCode, String phoneNumber, Date birthDate, boolean isAdmin) {
-        this.email = email;
-        this.username = username;
-        this.firstName = firstName;
-        this.lastName = lastName;
-        this.callingCode = callingCode;
-        this.phoneNumber = phoneNumber;
-        this.birthDate = birthDate;
-        this.isAdmin = isAdmin;
-        this.isActive = true;
-    }
-
-    public User(User user) {
-        this(user.getEmail(),
-                user.getUsername(),
-                user.getFirstName(),
-                user.getLastName(),
-                user.getCallingCode(),
-                user.getPhoneNumber(),
-                user.getBirthDate(),
-                user.isAdmin());
-    }
-
-    public String getEmail() {
-        return email;
-    }
-
-    public String getUsername() {
-        return username;
-    }
-
-    public String getFirstName() {
-        return firstName;
-    }
-
-    public String getLastName() {
-        return lastName;
-    }
-
-    public String getCallingCode() {
-        return callingCode;
-    }
-
-    public String getPhoneNumber() {
-        return phoneNumber;
-    }
-
-    public Date getBirthDate() {
-        return birthDate;
-    }
-
-    public boolean isAdmin() {
-        return isAdmin;
-    }
-
-    public boolean isActive() {
-        return isActive;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-        User user = (User) o;
-        return username.equals(user.username);
-    }
-}
diff --git a/src/main/java/NTNU/IDATT1002/repository/LoginRepository.java b/src/main/java/NTNU/IDATT1002/repository/LoginRepository.java
deleted file mode 100644
index 22460df0..00000000
--- a/src/main/java/NTNU/IDATT1002/repository/LoginRepository.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package NTNU.IDATT1002.repository;
-
-
-import NTNU.IDATT1002.models.Login;
-
-import javax.persistence.EntityManager;
-import java.util.List;
-import java.util.Optional;
-
-
-public class LoginRepository implements Repository<Login, String> {
-
-    private EntityManager entityManager;
-
-    public LoginRepository(EntityManager entityManager) {
-        this.entityManager = entityManager;
-    }
-
-    public Optional<Login> findById(String id) {
-        Login login = entityManager.find(Login.class, id);
-        return login != null ? Optional.of(login) : Optional.empty();
-    }
-
-    public Optional<Login> findByUsername(String username) {
-        return findById(username);
-    }
-
-    public List<Login> findAll() {
-        return entityManager.createQuery("from Login").getResultList();
-    }
-
-    public Optional<Login> save(Login login) {
-        try {
-            entityManager.getTransaction().begin();
-            entityManager.persist(login);
-            entityManager.getTransaction().commit();
-            return Optional.of(login);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-
-        return Optional.empty();
-    }
-
-    public Optional<Login> update(Login login) {
-        return Optional.empty();
-    }
-
-    public void deleteById(String id) {
-
-    }
-
-    public void deleteByUsername(String username) {
-        deleteById(username);
-    }
-
-    public void delete(Login login) {
-
-    }
-
-    public long count() {
-        return 0;
-    }
-
-    public boolean exists(Login entity) {
-        return false;
-    }
-
-}
\ No newline at end of file
diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml
index f088ef2a..c0ff9da9 100644
--- a/src/main/resources/META-INF/persistence.xml
+++ b/src/main/resources/META-INF/persistence.xml
@@ -8,8 +8,6 @@
         <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
 
         <!-- Entity classes -->
-        <class>NTNU.IDATT1002.models.Login</class>
-        <class>NTNU.IDATT1002.models.User</class>
 
         <properties>
             <!-- Configuring JDBC properties -->
-- 
GitLab


From 8565864d8b40632a5c17b01b7eb625a848483c97 Mon Sep 17 00:00:00 2001
From: Eirik Steira <eirsteir@stud.ntnu.no>
Date: Sat, 14 Mar 2020 14:28:46 +0100
Subject: [PATCH 4/4] Remove logging from App.java

---
 src/main/java/NTNU/IDATT1002/App.java | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/src/main/java/NTNU/IDATT1002/App.java b/src/main/java/NTNU/IDATT1002/App.java
index 1a790773..5d464e8d 100644
--- a/src/main/java/NTNU/IDATT1002/App.java
+++ b/src/main/java/NTNU/IDATT1002/App.java
@@ -5,7 +5,6 @@ import javafx.fxml.FXMLLoader;
 import javafx.scene.Parent;
 import javafx.scene.Scene;
 import javafx.stage.Stage;
-import org.slf4j.Logger;
 
 import java.io.IOException;
 
@@ -14,8 +13,6 @@ public class App extends Application {
 
     private static Scene scene;
 
-    private static Logger log;
-
     @Override
     public void start(Stage stage) throws IOException {
         scene = new Scene(loadFXML("login"));
-- 
GitLab