From cddfb033ffa848f56ae183a3ba5f8283f932453d Mon Sep 17 00:00:00 2001
From: Mirco Nasuti <mirco.nasuti@chuv.ch>
Date: Wed, 9 Dec 2015 12:00:57 +0100
Subject: [PATCH] bugfix database + add user to articles

---
 src/main/java/org/hbp/mip/MIPApplication.java | 22 ++++++++++++++++++-
 src/main/java/org/hbp/mip/model/Article.java  |  1 +
 src/main/java/org/hbp/mip/model/Chart.java    |  1 +
 .../org/hbp/mip/model/ChartConfigSet.java     |  6 ++---
 src/main/java/org/hbp/mip/model/Dataset.java  |  1 +
 src/main/java/org/hbp/mip/model/Filter.java   |  1 +
 src/main/java/org/hbp/mip/model/Group.java    |  1 +
 src/main/java/org/hbp/mip/model/Model.java    |  1 +
 src/main/java/org/hbp/mip/model/Query.java    |  1 +
 src/main/java/org/hbp/mip/model/Tag.java      |  6 ++---
 src/main/java/org/hbp/mip/model/User.java     | 12 ++++++++--
 src/main/java/org/hbp/mip/model/Value.java    |  6 ++---
 src/main/java/org/hbp/mip/model/Variable.java |  1 +
 13 files changed, 45 insertions(+), 15 deletions(-)

diff --git a/src/main/java/org/hbp/mip/MIPApplication.java b/src/main/java/org/hbp/mip/MIPApplication.java
index fc4264fc7..963ce02c4 100644
--- a/src/main/java/org/hbp/mip/MIPApplication.java
+++ b/src/main/java/org/hbp/mip/MIPApplication.java
@@ -75,6 +75,24 @@ public class MIPApplication extends WebSecurityConfigurerAdapter {
         return principal;
     }
 
+    private User principalToUser(Principal principal) {
+        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+        session.beginTransaction();
+        org.hibernate.Query query = session.createQuery("from User where username= :username");
+        query.setString("username", principal.getName());
+        User user = (User) query.uniqueResult();
+        session.getTransaction().commit();
+        if(user == null)
+        {
+            session = HibernateUtil.getSessionFactory().getCurrentSession();
+            session.beginTransaction();
+            user = new User(principal);
+            session.save(user);
+            session.getTransaction().commit();
+        }
+        return user;
+    }
+
     @RequestMapping(value = "/articles", method = RequestMethod.GET)
     @ResponseBody
     public List<Article> getArticles() {
@@ -133,13 +151,15 @@ public class MIPApplication extends WebSecurityConfigurerAdapter {
 
     @RequestMapping(value = "/articles", method = RequestMethod.POST)
     @ResponseBody
-    public Article postArticle(@RequestBody Article article) {
+    public Article postArticle(@RequestBody Article article, Principal principal) {
+        User user = principalToUser(principal);
         Session session = HibernateUtil.getSessionFactory().getCurrentSession();
         session.beginTransaction();
         article.setCreatedAt(new Date());
         article.setPublishedAt(new Date());
         article.setSlug(article.getTitle().toLowerCase());
         article.setStatus("published");
+        article.setCreatedBy(user);
         session.save(article);
         session.getTransaction().commit();
         return article;
diff --git a/src/main/java/org/hbp/mip/model/Article.java b/src/main/java/org/hbp/mip/model/Article.java
index afc86a5b6..d3a3173b8 100644
--- a/src/main/java/org/hbp/mip/model/Article.java
+++ b/src/main/java/org/hbp/mip/model/Article.java
@@ -10,6 +10,7 @@ import java.util.LinkedList;
 import java.util.List;
 
 @Entity
+@Table(name = "article_mip")
 public class Article {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
diff --git a/src/main/java/org/hbp/mip/model/Chart.java b/src/main/java/org/hbp/mip/model/Chart.java
index 382f9ac91..c5ec9db5c 100644
--- a/src/main/java/org/hbp/mip/model/Chart.java
+++ b/src/main/java/org/hbp/mip/model/Chart.java
@@ -9,6 +9,7 @@ import java.util.LinkedList;
 import java.util.List;
 
 @Entity
+@Table(name = "chart_mip")
 public class Chart {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
diff --git a/src/main/java/org/hbp/mip/model/ChartConfigSet.java b/src/main/java/org/hbp/mip/model/ChartConfigSet.java
index 040f240c6..89e19dfc3 100644
--- a/src/main/java/org/hbp/mip/model/ChartConfigSet.java
+++ b/src/main/java/org/hbp/mip/model/ChartConfigSet.java
@@ -4,12 +4,10 @@
 
 package org.hbp.mip.model;
 
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
+import javax.persistence.*;
 
 @Entity
+@Table(name = "chart_config_set_mip")
 public class ChartConfigSet {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
diff --git a/src/main/java/org/hbp/mip/model/Dataset.java b/src/main/java/org/hbp/mip/model/Dataset.java
index 38f042443..7a1942ad3 100644
--- a/src/main/java/org/hbp/mip/model/Dataset.java
+++ b/src/main/java/org/hbp/mip/model/Dataset.java
@@ -9,6 +9,7 @@ import java.util.Date;
 import java.util.List;
 
 @Entity
+@Table(name = "dataset_mip")
 public class Dataset {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
diff --git a/src/main/java/org/hbp/mip/model/Filter.java b/src/main/java/org/hbp/mip/model/Filter.java
index 3c24be73f..ca62dffb4 100644
--- a/src/main/java/org/hbp/mip/model/Filter.java
+++ b/src/main/java/org/hbp/mip/model/Filter.java
@@ -7,6 +7,7 @@ package org.hbp.mip.model;
 import javax.persistence.*;
 
 @Entity
+@Table(name = "filter_mip")
 public class Filter {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
diff --git a/src/main/java/org/hbp/mip/model/Group.java b/src/main/java/org/hbp/mip/model/Group.java
index 4f9d54b29..cc93b4f53 100644
--- a/src/main/java/org/hbp/mip/model/Group.java
+++ b/src/main/java/org/hbp/mip/model/Group.java
@@ -9,6 +9,7 @@ import java.util.LinkedList;
 import java.util.List;
 
 @Entity
+@Table(name = "group_mip")
 public class Group {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
diff --git a/src/main/java/org/hbp/mip/model/Model.java b/src/main/java/org/hbp/mip/model/Model.java
index dbd119ebd..36600b419 100644
--- a/src/main/java/org/hbp/mip/model/Model.java
+++ b/src/main/java/org/hbp/mip/model/Model.java
@@ -8,6 +8,7 @@ import javax.persistence.*;
 import java.util.Date;
 
 @Entity
+@Table(name = "model_mip")
 public class Model {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
diff --git a/src/main/java/org/hbp/mip/model/Query.java b/src/main/java/org/hbp/mip/model/Query.java
index 6d81619b9..2ece36a75 100644
--- a/src/main/java/org/hbp/mip/model/Query.java
+++ b/src/main/java/org/hbp/mip/model/Query.java
@@ -9,6 +9,7 @@ import java.util.LinkedList;
 import java.util.List;
 
 @Entity
+@Table(name = "query_mip")
 public class Query {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
diff --git a/src/main/java/org/hbp/mip/model/Tag.java b/src/main/java/org/hbp/mip/model/Tag.java
index 48ad3e707..bfe8f74b8 100644
--- a/src/main/java/org/hbp/mip/model/Tag.java
+++ b/src/main/java/org/hbp/mip/model/Tag.java
@@ -4,12 +4,10 @@
 
 package org.hbp.mip.model;
 
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
+import javax.persistence.*;
 
 @Entity
+@Table(name = "tag_mip")
 public class Tag {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
diff --git a/src/main/java/org/hbp/mip/model/User.java b/src/main/java/org/hbp/mip/model/User.java
index 67b0d3826..5e3290a73 100644
--- a/src/main/java/org/hbp/mip/model/User.java
+++ b/src/main/java/org/hbp/mip/model/User.java
@@ -5,10 +5,12 @@
 package org.hbp.mip.model;
 
 import javax.persistence.*;
+import java.security.Principal;
 import java.util.LinkedList;
 import java.util.List;
 
 @Entity
+@Table(name = "user_mip")
 public class User {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -22,7 +24,7 @@ public class User {
     private String phone;
     private String birthday;
     private String gender;
-    @ElementCollection
+    @ElementCollection(fetch = FetchType.EAGER)
     private List<String> languages;
     private String city;
     private String country;
@@ -31,12 +33,18 @@ public class User {
     private boolean isActive;
     private String apikey;
     private String team;
-    @ElementCollection
+    @ElementCollection(fetch = FetchType.EAGER)
     private List<String> roles;
 
     public User() {
     }
 
+    public User(Principal principal)
+    {
+        this.username = principal.getName();
+        this.fullname = this.username;
+    }
+
     public Long getId() {
         return id;
     }
diff --git a/src/main/java/org/hbp/mip/model/Value.java b/src/main/java/org/hbp/mip/model/Value.java
index f5afddc68..845dd3d9d 100644
--- a/src/main/java/org/hbp/mip/model/Value.java
+++ b/src/main/java/org/hbp/mip/model/Value.java
@@ -4,12 +4,10 @@
 
 package org.hbp.mip.model;
 
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
+import javax.persistence.*;
 
 @Entity
+@Table(name = "value_mip")
 public class Value {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
diff --git a/src/main/java/org/hbp/mip/model/Variable.java b/src/main/java/org/hbp/mip/model/Variable.java
index 9439aabee..a19fe9d57 100644
--- a/src/main/java/org/hbp/mip/model/Variable.java
+++ b/src/main/java/org/hbp/mip/model/Variable.java
@@ -9,6 +9,7 @@ import java.util.LinkedList;
 import java.util.List;
 
 @Entity
+@Table(name = "variable_mip")
 public class Variable {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
-- 
GitLab