From 656b9f02ded02f44929242799c71851febccf584 Mon Sep 17 00:00:00 2001
From: Mirco Nasuti <mirco.nasuti@chuv.ch>
Date: Mon, 14 Mar 2016 15:15:43 +0100
Subject: [PATCH] manage same titles for models and articles + reindent

---
 .../org/hbp/mip/controllers/ArticlesApi.java  | 82 +++++++++++++++---
 .../org/hbp/mip/controllers/DatasetsApi.java  |  8 +-
 .../org/hbp/mip/controllers/GroupsApi.java    |  7 +-
 .../org/hbp/mip/controllers/ModelsApi.java    | 85 ++++++++++++++++---
 .../org/hbp/mip/controllers/UsersApi.java     |  7 +-
 .../org/hbp/mip/controllers/VariablesApi.java | 16 ++--
 6 files changed, 165 insertions(+), 40 deletions(-)

diff --git a/src/main/java/org/hbp/mip/controllers/ArticlesApi.java b/src/main/java/org/hbp/mip/controllers/ArticlesApi.java
index dc67e1c1e..f31008209 100644
--- a/src/main/java/org/hbp/mip/controllers/ArticlesApi.java
+++ b/src/main/java/org/hbp/mip/controllers/ArticlesApi.java
@@ -100,25 +100,55 @@ public class ArticlesApi {
 
         User user = mipApplication.getUser();
 
+        String originalTitle = article.getTitle();
+
         article.setCreatedAt(new Date());
         if (article.getStatus().equals("published")) {
             article.setPublishedAt(new Date());
         }
-
-        Slugify slg = null;
-        try {
-            slg = new Slugify();
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-        String slug = slg.slugify(article.getTitle());
-
-        article.setSlug(slug);
         article.setCreatedBy(user);
 
         Session session = HibernateUtil.getSessionFactory().getCurrentSession();
         try{
             session.beginTransaction();
+
+            Long count;
+            int i = 0;
+            do {
+                Slugify slg = null;
+                try {
+                    slg = new Slugify();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+                String slug = slg.slugify(article.getTitle());
+                article.setSlug(slug);
+
+                count = (Long) session
+                        .createQuery("select count(*) from Article where slug= :slug")
+                        .setString("slug", slug)
+                        .uniqueResult();
+                if(count > 0)
+                {
+                    String title = article.getTitle();
+                    if(i > 0)
+                    {
+                        title = title.substring(0, title.length()-4);
+                    }
+                    i++;
+                    article.setTitle(title + " (" + i + ")");
+                }
+            } while(count > 0);
+
+            count = (Long) session
+                    .createQuery("select count(*) from Article where title= :title")
+                    .setString("title", originalTitle)
+                    .uniqueResult();
+            if(count < 1)
+            {
+                article.setTitle(originalTitle);
+            }
+
             session.save(article);
             session.getTransaction().commit();
         } catch (Exception e)
@@ -144,9 +174,10 @@ public class ArticlesApi {
         Article article = null;
         try{
             session.beginTransaction();
-            Query query = session.createQuery("FROM Article WHERE slug= :slug");
-            query.setString("slug", slug);
-            article = (Article) query.uniqueResult();
+            article = (Article) session
+                    .createQuery("FROM Article WHERE slug= :slug")
+                    .setString("slug", slug)
+                    .uniqueResult();
             session.getTransaction().commit();
         } catch (Exception e)
         {
@@ -171,6 +202,31 @@ public class ArticlesApi {
         Session session = HibernateUtil.getSessionFactory().getCurrentSession();
         try{
             session.beginTransaction();
+
+            String oldTitle = (String) session
+                    .createQuery("select title from Article where slug= :slug")
+                    .setString("slug", slug)
+                    .uniqueResult();
+
+            if(!oldTitle.equals(article.getTitle())) {
+                Long count;
+                int i = 0;
+                do {
+                    String title = article.getTitle();
+                    count = (Long) session
+                            .createQuery("select count(*) from Article where title= :title")
+                            .setString("title", title)
+                            .uniqueResult();
+                    if (count > 0 && !oldTitle.equals(title)) {
+                        if (i > 0) {
+                            title = title.substring(0, title.length() - 4);
+                        }
+                        i++;
+                        article.setTitle(title + " (" + i + ")");
+                    }
+                } while (count > 0 && !oldTitle.equals(article.getTitle()));
+            }
+
             session.update(article);
             session.getTransaction().commit();
         } catch (Exception e)
diff --git a/src/main/java/org/hbp/mip/controllers/DatasetsApi.java b/src/main/java/org/hbp/mip/controllers/DatasetsApi.java
index 35671ac13..c71623e7d 100644
--- a/src/main/java/org/hbp/mip/controllers/DatasetsApi.java
+++ b/src/main/java/org/hbp/mip/controllers/DatasetsApi.java
@@ -8,7 +8,6 @@ package org.hbp.mip.controllers;
 import io.swagger.annotations.*;
 import org.hbp.mip.model.Dataset;
 import org.hbp.mip.utils.HibernateUtil;
-import org.hibernate.Query;
 import org.hibernate.Session;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -34,9 +33,10 @@ public class DatasetsApi {
         Dataset dataset = null;
         try{
             session.beginTransaction();
-            Query query = session.createQuery("from Dataset where code= :code");
-            query.setString("code", code);
-            dataset = (Dataset) query.uniqueResult();
+            dataset = (Dataset) session
+                    .createQuery("from Dataset where code= :code")
+                    .setString("code", code)
+                    .uniqueResult();
             session.getTransaction().commit();
         } catch (Exception e)
         {
diff --git a/src/main/java/org/hbp/mip/controllers/GroupsApi.java b/src/main/java/org/hbp/mip/controllers/GroupsApi.java
index cbe99321b..49e6853bf 100644
--- a/src/main/java/org/hbp/mip/controllers/GroupsApi.java
+++ b/src/main/java/org/hbp/mip/controllers/GroupsApi.java
@@ -34,9 +34,10 @@ public class GroupsApi {
         Group group = null;
         try{
             session.beginTransaction();
-            org.hibernate.Query query = session.createQuery("FROM Group WHERE code= :code");
-            query.setString("code", rootCode);
-            group = (Group) query.uniqueResult();
+            group = (Group) session
+                    .createQuery("FROM Group WHERE code= :code")
+                    .setString("code", rootCode)
+                    .uniqueResult();
             session.getTransaction().commit();
         } catch (Exception e)
         {
diff --git a/src/main/java/org/hbp/mip/controllers/ModelsApi.java b/src/main/java/org/hbp/mip/controllers/ModelsApi.java
index ba4ae5e8f..c86d20d75 100644
--- a/src/main/java/org/hbp/mip/controllers/ModelsApi.java
+++ b/src/main/java/org/hbp/mip/controllers/ModelsApi.java
@@ -103,15 +103,8 @@ public class ModelsApi {
 
         User user = mipApplication.getUser();
 
-        Slugify slg = null;
-        try {
-            slg = new Slugify();
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-        String slug = slg.slugify(model.getConfig().getTitle().get("text"));
+        String originalTitle = model.getTitle();
 
-        model.setSlug(slug);
         model.setTitle(model.getConfig().getTitle().get("text"));
         model.setValid(true);
         model.setCreatedBy(user);
@@ -121,6 +114,45 @@ public class ModelsApi {
 
         try {
             session.beginTransaction();
+            Long count;
+            int i = 0;
+
+            do {
+                Slugify slg = null;
+                try {
+                    slg = new Slugify();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+                String slug = slg.slugify(model.getTitle());
+                model.setSlug(slug);
+
+                count = (Long) session
+                        .createQuery("select count(*) from Model where slug= :slug")
+                        .setString("slug", slug)
+                        .uniqueResult();
+                if(count > 0)
+                {
+                    String title = model.getTitle();
+                    if(i > 0)
+                    {
+                        title = title.substring(0, title.length()-4);
+                    }
+                    i++;
+                    model.setTitle(title + " (" + i + ")");
+                }
+
+            } while (count > 0);
+
+            count = (Long) session
+                    .createQuery("select count(*) from Article where title= :title")
+                    .setString("title", originalTitle)
+                    .uniqueResult();
+            if(count < 1)
+            {
+                model.setTitle(originalTitle);
+            }
+
             session.save(model);
             session.getTransaction().commit();
         } catch (Exception e)
@@ -148,8 +180,10 @@ public class ModelsApi {
 
         try {
             session.beginTransaction();
-            query = session.createQuery("FROM Model WHERE slug= :slug").setString("slug", slug);
-            model = (Model) query.uniqueResult();
+            model = (Model) session
+                    .createQuery("FROM Model WHERE slug= :slug")
+                    .setString("slug", slug)
+                    .uniqueResult();
             session.getTransaction().commit();
 
         } catch (Exception e)
@@ -167,8 +201,10 @@ public class ModelsApi {
 
             try {
                 session.beginTransaction();
-                query = session.createQuery("FROM Query WHERE id= :id").setLong("id", model.getQuery().getId());
-                q = (org.hbp.mip.model.Query) query.uniqueResult();
+                q = (org.hbp.mip.model.Query) session
+                        .createQuery("FROM Query WHERE id= :id")
+                        .setLong("id", model.getQuery().getId())
+                        .uniqueResult();
                 session.getTransaction().commit();
             } catch (Exception e)
             {
@@ -240,6 +276,31 @@ public class ModelsApi {
         Session session = HibernateUtil.getSessionFactory().getCurrentSession();
         try{
             session.beginTransaction();
+
+            String oldTitle = (String) session
+                    .createQuery("select title from Article where slug= :slug")
+                    .setString("slug", slug)
+                    .uniqueResult();
+
+            if(!oldTitle.equals(model.getTitle())) {
+                Long count;
+                int i = 0;
+                do {
+                    String title = model.getTitle();
+                    count = (Long) session
+                            .createQuery("select count(*) from Article where title= :title")
+                            .setString("title", title)
+                            .uniqueResult();
+                    if (count > 0 && !oldTitle.equals(title)) {
+                        if (i > 0) {
+                            title = title.substring(0, title.length() - 4);
+                        }
+                        i++;
+                        model.setTitle(title + " (" + i + ")");
+                    }
+                } while (count > 0 && !oldTitle.equals(model.getTitle()));
+            }
+
             session.update(model);
             session.getTransaction().commit();
         } catch (Exception e)
diff --git a/src/main/java/org/hbp/mip/controllers/UsersApi.java b/src/main/java/org/hbp/mip/controllers/UsersApi.java
index 465b833a0..4b3982f57 100644
--- a/src/main/java/org/hbp/mip/controllers/UsersApi.java
+++ b/src/main/java/org/hbp/mip/controllers/UsersApi.java
@@ -33,9 +33,10 @@ public class UsersApi {
         User user = null;
         try{
             session.beginTransaction();
-            org.hibernate.Query query = session.createQuery("from User where username= :username");
-            query.setString("username", username);
-            user = (User) query.uniqueResult();
+            user = (User) session
+                    .createQuery("from User where username= :username")
+                    .setString("username", username)
+                    .uniqueResult();
             session.getTransaction().commit();
         } catch (Exception e)
         {
diff --git a/src/main/java/org/hbp/mip/controllers/VariablesApi.java b/src/main/java/org/hbp/mip/controllers/VariablesApi.java
index a98bbc384..9c7e99dd8 100644
--- a/src/main/java/org/hbp/mip/controllers/VariablesApi.java
+++ b/src/main/java/org/hbp/mip/controllers/VariablesApi.java
@@ -39,7 +39,9 @@ public class VariablesApi {
         List variables = new LinkedList<>();
         try{
             session.beginTransaction();
-            variables = session.createQuery("from Variable").list();
+            variables = session
+                    .createQuery("from Variable")
+                    .list();
             session.getTransaction().commit();
         } catch (Exception e)
         {
@@ -64,9 +66,10 @@ public class VariablesApi {
         Variable variable = null;
         try{
             session.beginTransaction();
-            org.hibernate.Query query = session.createQuery("from Variable where code= :code");
-            query.setString("code", code);
-            variable = (Variable) query.uniqueResult();
+            variable = (Variable) session
+                    .createQuery("from Variable where code= :code")
+                    .setString("code", code)
+                    .uniqueResult();
             session.getTransaction().commit();
         } catch (Exception e)
         {
@@ -93,7 +96,10 @@ public class VariablesApi {
         List values = new LinkedList<>();
         try{
             session.beginTransaction();
-            values = session.createQuery("select values from Variable where code= :code").setString("code", code).list();
+            values = session
+                    .createQuery("select values from Variable where code= :code")
+                    .setString("code", code)
+                    .list();
             session.getTransaction().commit();
         } catch (Exception e)
         {
-- 
GitLab