diff --git a/src/main/java/org/hbp/mip/data/Database.java b/src/main/java/org/hbp/mip/data/Database.java index 3942c9cbef8eea7bd4525ef18624cb2dd7e22aca..89794187327ed39e2072a23933aa34118eb810d6 100644 --- a/src/main/java/org/hbp/mip/data/Database.java +++ b/src/main/java/org/hbp/mip/data/Database.java @@ -1,13 +1,19 @@ package org.hbp.mip.data; import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; import org.hbp.mip.controllers.HibernateUtil; import org.hbp.mip.model.Group; +import org.hbp.mip.model.Value; +import org.hbp.mip.model.Variable; import org.hibernate.Session; -import java.io.*; +import java.io.IOException; +import java.lang.reflect.Type; import java.nio.file.Files; import java.nio.file.Paths; +import java.util.LinkedList; +import java.util.List; /** * Created by mirco on 11.01.16. @@ -19,17 +25,9 @@ public class Database { public static void loadGroups() { // Read data from file - String inputFile = GROUPS_SRC; - File f = new File(inputFile); - FileReader fr; - BufferedReader br; String data = ""; try { - fr = new FileReader(f); - br = new BufferedReader(fr); data = new String(Files.readAllBytes(Paths.get(GROUPS_SRC))); - br.close(); - fr.close(); } catch (IOException e) { e.printStackTrace(); } @@ -46,22 +44,70 @@ public class Database { } public static void loadVariables() { + // Read data from file + String data = ""; + try { + data = new String(Files.readAllBytes(Paths.get(VARIABLES_SRC))); + } catch (IOException e) { + e.printStackTrace(); + } - String inputFile = VARIABLES_SRC; + // Parse JSON + Gson gson = new Gson(); + Type listVariablesType = new TypeToken<LinkedList<Variable>>(){}.getType(); + List<Variable> variables = gson.fromJson(data, listVariablesType); - File f = new File(inputFile); - FileReader fr; - BufferedReader br; + // Sync groups and values with DB + for(Variable v : variables) + { + Group g = v.getGroup(); + if(g != null) + { + v.setGroup(readGroupFromDB(g.getCode())); + } + List<Value> newValues = new LinkedList<>(); + for(Value val : v.getValues()) + { + Value existingVal = readValueFromDB(val.getCode()); + if(existingVal == null) + { + Session session = HibernateUtil.getSessionFactory().getCurrentSession(); + session.beginTransaction(); + session.save(val); + session.getTransaction().commit(); + existingVal = val; + } + newValues.add(existingVal); + } + v.setValues(newValues); + } - try { - fr = new FileReader(f); - br = new BufferedReader(fr); + // Insert into DB + Session session = HibernateUtil.getSessionFactory().getCurrentSession(); + session.beginTransaction(); + variables.forEach(session::save); + session.getTransaction().commit(); + } - br.close(); - fr.close(); + private static Group readGroupFromDB(String code) + { + Session session = HibernateUtil.getSessionFactory().getCurrentSession(); + session.beginTransaction(); + org.hibernate.Query query = session.createQuery("from Group where code= :code"); + query.setString("code", code); + Group group = (Group) query.uniqueResult(); + session.getTransaction().commit(); + return group; + } - } catch (IOException e) { - e.printStackTrace(); - } + private static Value readValueFromDB(String code) + { + Session session = HibernateUtil.getSessionFactory().getCurrentSession(); + session.beginTransaction(); + org.hibernate.Query query = session.createQuery("from Value where code= :code"); + query.setString("code", code); + Value value = (Value) query.uniqueResult(); + session.getTransaction().commit(); + return value; } } diff --git a/src/main/java/org/hbp/mip/model/Article.java b/src/main/java/org/hbp/mip/model/Article.java index 49b8bb3bfc2eb5afbcf8c318d1af21d4e345cbb4..1556239706bc07240be0e834675ae2f17505d1aa 100644 --- a/src/main/java/org/hbp/mip/model/Article.java +++ b/src/main/java/org/hbp/mip/model/Article.java @@ -37,7 +37,7 @@ public class Article { private User createdBy = null; @ManyToOne private User updatedBy = null; - @ManyToMany(fetch = FetchType.EAGER) + @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) private List<Tag> tags = new LinkedList<Tag>(); public Article() { diff --git a/src/main/java/org/hbp/mip/model/Variable.java b/src/main/java/org/hbp/mip/model/Variable.java index 267bedbcd4cb1d388ac9b4e29c38da8296060a4c..08c8d97ff4c8ee4b43fd5182182bbdd2705bc53b 100644 --- a/src/main/java/org/hbp/mip/model/Variable.java +++ b/src/main/java/org/hbp/mip/model/Variable.java @@ -22,7 +22,7 @@ public class Variable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id = null; - @ManyToOne + @ManyToOne(fetch = FetchType.EAGER) private Group group = null; @Column(unique = true) private String code = null; @@ -32,7 +32,7 @@ public class Variable { private Boolean isVariable = null; private Boolean isGrouping = null; private Boolean isFilter = null; - @ManyToMany + @ManyToMany(fetch = FetchType.EAGER) private List<Value> values = new LinkedList<Value>(); public Variable() {