From c1b0777646936d351def1cafd37a7b6f0e6ffe7b Mon Sep 17 00:00:00 2001
From: Falucho <german.faller@pcunix71.fing.edu.uy>
Date: Sun, 23 Jun 2019 14:23:33 -0300
Subject: [PATCH] Fisrt Commit

---
 .../edu/fing/tse/jsf/GestionhechosBean.java   |  67 +-------
 .../java/uy/edu/fing/tse/jsf/RequestBean.java |   1 -
 .../src/main/webapp/jsf/gestionhechos.xhtml   |   5 +-
 .../fing/tse/central/db/dao/GenericDao.java   |  14 ++
 .../tse/central/db/dao/fact/FactDAOBean.java  | 157 ++++++++++++++++++
 .../tse/central/db/dao/fact/FactDaoLocal.java |  27 +++
 .../edu/fing/tse/central/db/entity/Hecho.java |   6 +-
 .../fing/tse/central/db/startup/Config.java   |  77 ++++++++-
 .../fing/tse/central/business/Business.java   |   9 +-
 .../tse/central/business/BusinessBean.java    |  18 +-
 10 files changed, 295 insertions(+), 86 deletions(-)
 create mode 100644 central-db/src/main/java/uy/edu/fing/tse/central/db/dao/GenericDao.java
 create mode 100644 central-db/src/main/java/uy/edu/fing/tse/central/db/dao/fact/FactDAOBean.java
 create mode 100644 central-db/src/main/java/uy/edu/fing/tse/central/db/dao/fact/FactDaoLocal.java

diff --git a/backoffice/src/main/java/uy/edu/fing/tse/jsf/GestionhechosBean.java b/backoffice/src/main/java/uy/edu/fing/tse/jsf/GestionhechosBean.java
index 672bd06..c637d37 100644
--- a/backoffice/src/main/java/uy/edu/fing/tse/jsf/GestionhechosBean.java
+++ b/backoffice/src/main/java/uy/edu/fing/tse/jsf/GestionhechosBean.java
@@ -1,91 +1,36 @@
 package uy.edu.fing.tse.jsf;
 
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import uy.edu.fing.tse.central.business.BusinessLocal;
-import uy.edu.fing.tse.central.business.common.Notifier;
 import uy.edu.fing.tse.dto.Fact;
-import uy.edu.fing.tse.dto.Peripherical;
 
 import javax.annotation.PostConstruct;
 import javax.ejb.EJB;
 import javax.enterprise.context.RequestScoped;
-import javax.faces.bean.ManagedBean;
-import javax.faces.event.AbortProcessingException;
-import javax.faces.event.AjaxBehaviorEvent;
-import javax.faces.push.Push;
-import javax.faces.push.PushContext;
-import javax.inject.Inject;
 import javax.inject.Named;
 import java.io.Serializable;
-import java.time.LocalDateTime;
-import java.util.ArrayList;
 import java.util.List;
-import javax.enterprise.context.RequestScoped;
-import javax.inject.Named;
-import java.io.Serializable;
 
 @RequestScoped
 @Named("gestionHechos")
-
-
 public class GestionhechosBean implements Serializable {
 
-    private static final long serialVersionUID = -7674319505640122631L;
-
-    private String username;
-    private String password;
-    private String repassword;
+    private static final long serialVersionUID = 9142442208455999158L;
 
+    @EJB
+    private BusinessLocal service;
 
-    private HechosService service;
-
+    @PostConstruct
     public void init() {
-        filteredFacts = service.createHechos(10);
-
+        filteredFacts = service.listarHechos();
     }
 
-
     private List<Fact> filteredFacts;
 
-    public String getUsername() {
-        return username;
-    }
-
-    public void setUsername(String username) {
-        this.username = username;
-    }
-
-    public String getPassword() {
-        return password;
-    }
-
-    public void setPassword(String password) {
-        this.password = password;
-    }
-
-    public String getRepassword() {
-        return repassword;
-    }
-
-    public void setRepassword(String repassword) {
-        this.repassword = repassword;
-    }
-
-
-    public void login() {
-        //aca va el login
-    }
-
-    public void register() {
-        //aca va el register
-    }
-
 
     public List<Fact> getFilteredNFact() {
         return filteredFacts;
     }
+
     public void setFilteredNoticias(List<Fact> filteredNoticias) {
         this.filteredFacts = filteredNoticias;
     }
diff --git a/backoffice/src/main/java/uy/edu/fing/tse/jsf/RequestBean.java b/backoffice/src/main/java/uy/edu/fing/tse/jsf/RequestBean.java
index 5b5ed56..b73c2ca 100644
--- a/backoffice/src/main/java/uy/edu/fing/tse/jsf/RequestBean.java
+++ b/backoffice/src/main/java/uy/edu/fing/tse/jsf/RequestBean.java
@@ -68,7 +68,6 @@ public class RequestBean implements Serializable {
 
     public void hacerAlgo() {
         LOG.info("hacerAlgo");
-        negocio.test();
     }
 
     public String getName() {
diff --git a/backoffice/src/main/webapp/jsf/gestionhechos.xhtml b/backoffice/src/main/webapp/jsf/gestionhechos.xhtml
index fad0588..f4c83b7 100644
--- a/backoffice/src/main/webapp/jsf/gestionhechos.xhtml
+++ b/backoffice/src/main/webapp/jsf/gestionhechos.xhtml
@@ -37,11 +37,11 @@
 
 <f:view>
     <h:form >
-
         <p:outputPanel style="font-size: 30px;text-align: center">
             <h:outputText value= "Bienvenido " />
             <h:outputText value=  "#{userLoginView.user.mail}" />
         </p:outputPanel>
+
         <p:dataTable var="hecho" id="dataHecho" value="#{gestionHechos.filteredNFact}" widgetVar="NoticiasTable"
                      emptyMessage="Hecho no encontrada" filteredValue="#{gestionHechos.filteredNFact}">
             <f:facet name="header">
@@ -66,10 +66,7 @@
                 </f:facet>
 
             </p:column>
-
         </p:dataTable>
-
-
     </h:form>
 </f:view>
 </html>
diff --git a/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/GenericDao.java b/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/GenericDao.java
new file mode 100644
index 0000000..ad8e199
--- /dev/null
+++ b/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/GenericDao.java
@@ -0,0 +1,14 @@
+package uy.edu.fing.tse.central.db.dao;
+
+import java.util.List;
+
+public interface GenericDao<T> {
+
+    void create(T elem);
+
+    T find(String key);
+
+    T find(Long id);
+
+    List<T> findAll();
+}
diff --git a/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/fact/FactDAOBean.java b/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/fact/FactDAOBean.java
new file mode 100644
index 0000000..7680fa0
--- /dev/null
+++ b/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/fact/FactDAOBean.java
@@ -0,0 +1,157 @@
+package uy.edu.fing.tse.central.db.dao.fact;
+
+import uy.edu.fing.tse.central.db.entity.Hecho;
+import uy.edu.fing.tse.central.db.mapper.MyMapper;
+import uy.edu.fing.tse.dto.Fact;
+
+import javax.annotation.PostConstruct;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Stateless
+public class FactDAOBean implements FactDaoLocal {
+
+    @PersistenceContext(unitName = "central")
+    private EntityManager em;
+
+    @PostConstruct
+    void init() {
+        //Despues del constructor hace esto
+    }
+
+    @Override
+    public void create(Fact elem) {
+        final var hecho = MyMapper.INSTANCE.convert(elem);
+        em.persist(hecho);
+        em.flush();
+    }
+
+    @Override
+    public Fact find(String key) {
+        return find(Long.parseLong(key));
+    }
+
+    @Override
+    public Fact find(Long id) {
+        final var hecho = em.find(Hecho.class, id);
+        return MyMapper.INSTANCE.convert(hecho);
+    }
+
+    @Override
+    public List<Fact> findAll() {
+        final var query = em.createNamedQuery("Hecho.findAll", Hecho.class);
+        final List<Hecho> hechos = query.getResultList();
+        return hechos.stream().map(MyMapper.INSTANCE::convert).collect(Collectors.toList());
+    }
+
+    @Override
+    public List<Fact> search(final String value, final String state, final Date after, final Date before) {
+        boolean addWhere = true;
+        Map<String, Object> params = new HashMap<>();
+        String hql = "SELECT DISTINCT h FROM Hecho h INNER JOIN h.actualState AS e INNER JOIN h.history AS s ";
+
+        if (notNullOrEmpty(value)) {
+            hql += " WHERE ";
+            addWhere = false;
+            hql += "( h.title LIKE %:title%";
+            hql += " OR ";
+            hql += " h.desc LIKE %:description% )";
+            params.put("title", value);
+            params.put("description", value);
+        }
+
+        if (notNullOrEmpty(state)) {
+            if (addWhere) {
+                hql += " WHERE ";
+                addWhere = false;
+            } else {
+                hql += " AND ";
+            }
+            hql += " e.value = :state";
+            params.put("state", state);
+        }
+
+        if (after != null) {
+            if (addWhere) {
+                hql += " WHERE ";
+                addWhere = false;
+            } else {
+                hql += " AND ";
+            }
+            hql += " s.date <= :after";
+            params.put("after", after);
+        }
+
+        if (before != null) {
+            if (addWhere) {
+                hql += " WHERE ";
+                addWhere = false;
+            } else {
+                hql += " AND ";
+            }
+            hql += " s.date >= :before";
+            params.put("state", before);
+        }
+
+        final var query = em.createQuery(hql, Hecho.class);
+        for (Map.Entry<String, Object> param : params.entrySet()) {
+            query.setParameter(param.getKey(), param.getValue());
+        }
+        final List<Hecho> hechos = query.getResultList();
+        return hechos.stream().map(MyMapper.INSTANCE::convert).collect(Collectors.toList());
+    }
+
+    @Override
+    public List<Fact> filter(final String title, final String desc, final String state) {
+        boolean addWhere = true;
+        Map<String, String> params = new HashMap<>();
+        String hql = "SELECT h FROM Hecho h INNER JOIN h.actualState AS e ";
+
+        if (notNullOrEmpty(title)) {
+            hql += " WHERE ";
+            addWhere = false;
+            hql += " h.title = :title";
+            params.put("title", title);
+        }
+        if (notNullOrEmpty(desc)) {
+            if (addWhere) {
+                hql += " WHERE ";
+                addWhere = false;
+            } else {
+                hql += " AND ";
+            }
+            hql += " h.desc = :description";
+            params.put("description", desc);
+        }
+        if (notNullOrEmpty(state)) {
+            if (addWhere) {
+                hql += " WHERE ";
+                addWhere = false;
+            } else {
+                hql += " AND ";
+            }
+            hql += " e.value = :state";
+            params.put("state", state);
+        }
+        final var query = em.createQuery(hql, Hecho.class);
+        for (Map.Entry<String, String> param : params.entrySet()) {
+            query.setParameter(param.getKey(), param.getValue());
+        }
+        final List<Hecho> hechos = query.getResultList();
+        return hechos.stream().map(MyMapper.INSTANCE::convert).collect(Collectors.toList());
+    }
+
+    private boolean nullOrEmpty(final String val) {
+        return val == null || val.isEmpty();
+    }
+
+    private boolean notNullOrEmpty(final String val) {
+        return !nullOrEmpty(val);
+    }
+}
diff --git a/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/fact/FactDaoLocal.java b/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/fact/FactDaoLocal.java
new file mode 100644
index 0000000..6165408
--- /dev/null
+++ b/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/fact/FactDaoLocal.java
@@ -0,0 +1,27 @@
+package uy.edu.fing.tse.central.db.dao.fact;
+
+import uy.edu.fing.tse.central.db.dao.GenericDao;
+import uy.edu.fing.tse.dto.Fact;
+
+import javax.ejb.Local;
+import java.util.Date;
+import java.util.List;
+
+@Local
+public interface FactDaoLocal extends GenericDao<Fact> {
+    @Override
+    void create(Fact elem);
+
+    @Override
+    Fact find(String key);
+
+    @Override
+    Fact find(Long id);
+
+    @Override
+    List<Fact> findAll();
+
+    List<Fact> search(String value, String state, Date after, Date before);
+
+    List<Fact> filter(String title, String desc, String state);
+}
diff --git a/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/Hecho.java b/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/Hecho.java
index 9f843f0..6f78c68 100644
--- a/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/Hecho.java
+++ b/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/Hecho.java
@@ -6,8 +6,10 @@ import java.util.List;
 
 @Entity
 @NamedQueries({
-        //@NamedQuery(name = "Periferico.findAll", query = "select c from Categoria c"),
-        //@NamedQuery(name = "Periferico.findByName", query = "select c from Categoria c where c.name = :name")
+        @NamedQuery(name = "Hecho.findAll", query = "select h from Hecho h"),
+        @NamedQuery(name = "Hecho.findByTitle", query = "select h from Hecho h where h.title = :title"),
+        @NamedQuery(name = "Hecho.findByDescription", query = "select h from Hecho h where h.description = :description"),
+        @NamedQuery(name = "Hecho.findByState", query = "select h from Hecho h INNER JOIN h.actualState AS e WHERE e.value = :state")
 })
 public final class Hecho {
 
diff --git a/central-db/src/main/java/uy/edu/fing/tse/central/db/startup/Config.java b/central-db/src/main/java/uy/edu/fing/tse/central/db/startup/Config.java
index 4415d90..0616ecc 100644
--- a/central-db/src/main/java/uy/edu/fing/tse/central/db/startup/Config.java
+++ b/central-db/src/main/java/uy/edu/fing/tse/central/db/startup/Config.java
@@ -1,28 +1,99 @@
 package uy.edu.fing.tse.central.db.startup;
 
-import uy.edu.fing.tse.central.db.DataAccessLocal;
+import uy.edu.fing.tse.central.db.dao.fact.FactDaoLocal;
+import uy.edu.fing.tse.central.db.dao.user.UserDaoLocal;
+import uy.edu.fing.tse.dto.Fact;
+import uy.edu.fing.tse.dto.State;
+import uy.edu.fing.tse.dto.StateHistory;
+import uy.edu.fing.tse.dto.UserBO;
 
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
 import javax.ejb.EJB;
 import javax.ejb.Singleton;
 import javax.ejb.Startup;
+import java.util.Date;
 
 @Singleton
 @Startup
 public class Config {
 
     @EJB
-    private DataAccessLocal dataAccess;
+    private FactDaoLocal hechos;
+    private UserDaoLocal users;
 
     @PostConstruct
     public void start() {
-
+        initUser();
+        initFacts();
     }
 
     @PreDestroy
     public void stop() {
     }
 
+    private void initUser() {
+        UserBO u = new UserBO();
+        u.setPassword("admin");
+        u.setMail("admin");
+        users.register(u);
+    }
+
+    private void initFacts() {
+        String[] titulos = new String[10];
+        String[] descripciones = new String[10];
+        String[] estados = new String[10];
+
+        titulos[0] = "Debutó la Unidad Previsional con éxito";
+        titulos[1] = "Sin claras señales de cambios en el billete verde";
+        titulos[2] = "Conaprole e Isusa colocaron US$ 17: en el mercado";
+        titulos[3] = "¿Quiere ser de la nobleza? Compre un título en Escocia";
+        titulos[4] = "¿Qué hacer con el dinero en momentos de \"nubarrones\"?";
+        titulos[5] = "Cavani alcanzó al \"Cebolla\"";
+        titulos[6] = "Petrobras emitió y captó US$ 2.000 millones";
+        titulos[7] = "Bonos brasileños en manos de argentinos no pagarán impuestos";
+        titulos[8] = "Noticia 9";
+        titulos[9] = "esta es la ultima noticia";
 
+        descripciones[0] = "Ayer, por primera vez, se emitió deuda en la recientemente creada Unidad Previsional (UP) que tiene cotización diaria y ajusta según la evolución del Índice Medio de Salarios Nominales.";
+        descripciones[1] = "En Brasil la divisa estadounidense subió un 2,49% en la semana, y en Argentina un 6,81%.";
+        descripciones[2] = "Dos emisiones donde la demanda superó el monto ofertado.";
+        descripciones[3] = "¿Le apetece unirse a la nobleza escocesa? Esta región del norte de Reino Unido ha visto desarrollarse toda una industria que permite que la gente ordinaria haga justamente eso, algunos con más justificación legal que otros.";
+        descripciones[4] = "Presidente y director de la Bolsa de Valores hicieron análisis y sugerencias.";
+        descripciones[5] = "PSG se consagró y el \"Matador\" es uno de los uruguayos con más títulos";
+        descripciones[6] = "La petrolera brasileña Petrobras informó ayer que captó US$ 2.000 millones con el lanzamiento el jueves en el exterior de títulos con vencimiento en 2029 por los que pagará un interés anual del 5,750%.";
+        descripciones[7] = "Bonos brasileños en manos de argentinos no pagarán impuestos";
+        descripciones[8] = "descripcion noticia 9";
+        descripciones[9] = "descripcion noticia 10";
+
+        estados[0] = "Verificado";
+        estados[1] = "Verificado";
+        estados[2] = "No Verificado";
+        estados[3] = "No Verificado";
+        estados[4] = "No Verificado";
+        estados[5] = "Verificado";
+        estados[6] = "Verificado";
+        estados[7] = "No Verificado";
+        estados[8] = "Verificado";
+        estados[9] = "No Verificado";
+
+        for (int i = 0; i < 10; i++) {
+            State actualState = new State();
+            actualState.setValue(estados[i]);
+            final var fact = new Fact();
+            fact.setTitle(titulos[i]);
+            fact.setDescription(descripciones[i]);
+            fact.setActualState(actualState);
+            StateHistory sh = new StateHistory();
+            sh.setState(actualState);
+            sh.setDate(new Date());
+            UserBO u = new UserBO();
+            u.setPassword("admin");
+            u.setMail("admin");
+            sh.setUser(u);
+            sh.setFact(fact);
+            fact.addHistory(sh);
+            hechos.create(fact);
+        }
+    }
 }
diff --git a/central-ejb/src/main/java/uy/edu/fing/tse/central/business/Business.java b/central-ejb/src/main/java/uy/edu/fing/tse/central/business/Business.java
index cc868cc..73b48b7 100644
--- a/central-ejb/src/main/java/uy/edu/fing/tse/central/business/Business.java
+++ b/central-ejb/src/main/java/uy/edu/fing/tse/central/business/Business.java
@@ -2,17 +2,18 @@ package uy.edu.fing.tse.central.business;
 
 
 import uy.edu.fing.tse.dto.CheckMechanism;
+import uy.edu.fing.tse.dto.Fact;
 import uy.edu.fing.tse.dto.Peripherical;
 
-import javax.ejb.Asynchronous;
+import java.io.Serializable;
+import java.util.List;
 
-public interface Business {
+public interface Business extends Serializable {
 
     void altaPeriferico(Peripherical p);
 
     void altaVerificacionMecanismo(CheckMechanism cm);
 
-    @Asynchronous
-    void test();
+    List<Fact> listarHechos();
 }
 
diff --git a/central-ejb/src/main/java/uy/edu/fing/tse/central/business/BusinessBean.java b/central-ejb/src/main/java/uy/edu/fing/tse/central/business/BusinessBean.java
index 60701e3..01fd588 100644
--- a/central-ejb/src/main/java/uy/edu/fing/tse/central/business/BusinessBean.java
+++ b/central-ejb/src/main/java/uy/edu/fing/tse/central/business/BusinessBean.java
@@ -3,22 +3,24 @@ package uy.edu.fing.tse.central.business;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import uy.edu.fing.tse.central.business.common.Notifier;
-import uy.edu.fing.tse.central.db.DataAccessLocal;
+import uy.edu.fing.tse.central.db.dao.fact.FactDaoLocal;
 import uy.edu.fing.tse.dto.CheckMechanism;
+import uy.edu.fing.tse.dto.Fact;
 import uy.edu.fing.tse.dto.Peripherical;
 
 import javax.annotation.PostConstruct;
 import javax.ejb.EJB;
 import javax.ejb.Stateless;
+import java.util.List;
 
 @Stateless
 public class BusinessBean implements BusinessLocal, BusinessRemote {
 
+    private static final long serialVersionUID = 4079626203846038482L;
     private static final Logger LOG = LoggerFactory.getLogger(Business.class);
 
     @EJB
-    private DataAccessLocal dataAccess;
+    private FactDaoLocal hechos;
 
     @PostConstruct
     void init() {
@@ -36,14 +38,8 @@ public class BusinessBean implements BusinessLocal, BusinessRemote {
     }
 
     @Override
-    public void test() {
-        try {
-            Thread.sleep(2000);
-        } catch (InterruptedException e) {
-
-        }
-        LOG.info("###++++++++++++++++++");
-        Notifier.notify("test", "este es un mensaje del mas alla");
+    public List<Fact> listarHechos() {
+        return hechos.findAll();
     }
 
 
-- 
GitLab