From e6adda919487e143994b74487612fb4d38beb503 Mon Sep 17 00:00:00 2001
From: Falucho <german.faller@pcunix71.fing.edu.uy>
Date: Mon, 24 Jun 2019 11:55:44 -0300
Subject: [PATCH] Mejorando Modelo
---
.../tse/central/db/dao/role/RoleDAOBean.java | 52 ++++++++++++++++
.../tse/central/db/dao/role/RoleDaoLocal.java | 11 ++++
.../central/db/dao/state/StateDAOBean.java | 52 ++++++++++++++++
.../central/db/dao/state/StateDaoLocal.java | 11 ++++
.../tse/central/db/dao/user/UserDAOBean.java | 18 ++++++
.../fing/tse/central/db/entity/Estado.java | 4 ++
.../tse/central/db/entity/Periferico.java | 2 +-
.../edu/fing/tse/central/db/entity/Rol.java | 4 ++
.../central/db/entity/TransicionEstado.java | 1 +
.../resources/META-INF/test-persistence.xml | 2 +-
central-db/src/test/resources/test-ds.xml | 4 +-
.../uy/edu/fing/tse/dto/StateHistory.java | 9 ---
.../fing/tse/central/business/Business.java | 10 ++-
.../tse/central/business/BusinessBean.java | 29 ++++++++-
.../central/business/mq/MessageConsumer.java | 6 +-
.../central/business/mq/MessageProducer.java | 3 +-
.../tse/central/business}/startup/Config.java | 62 ++++++++++++++-----
17 files changed, 241 insertions(+), 39 deletions(-)
create mode 100644 central-db/src/main/java/uy/edu/fing/tse/central/db/dao/role/RoleDAOBean.java
create mode 100644 central-db/src/main/java/uy/edu/fing/tse/central/db/dao/role/RoleDaoLocal.java
create mode 100644 central-db/src/main/java/uy/edu/fing/tse/central/db/dao/state/StateDAOBean.java
create mode 100644 central-db/src/main/java/uy/edu/fing/tse/central/db/dao/state/StateDaoLocal.java
rename {central-db/src/main/java/uy/edu/fing/tse/central/db => central-ejb/src/main/java/uy/edu/fing/tse/central/business}/startup/Config.java (75%)
diff --git a/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/role/RoleDAOBean.java b/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/role/RoleDAOBean.java
new file mode 100644
index 0000000..b59a80e
--- /dev/null
+++ b/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/role/RoleDAOBean.java
@@ -0,0 +1,52 @@
+package uy.edu.fing.tse.central.db.dao.role;
+
+import uy.edu.fing.tse.central.db.entity.Rol;
+import uy.edu.fing.tse.central.db.mapper.MyMapper;
+import uy.edu.fing.tse.dto.Role;
+
+import javax.annotation.PostConstruct;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Stateless
+public class RoleDAOBean implements RoleDaoLocal {
+
+ @PersistenceContext(unitName = "central")
+ private EntityManager em;
+
+ @PostConstruct
+ void init() {
+ //Despues del constructor hace esto
+ }
+
+ @Override
+ public void create(Role elem) {
+ final var r = MyMapper.INSTANCE.convert(elem);
+ em.persist(r);
+ em.flush();
+ }
+
+ @Override
+ public Role find(String key) {
+ final var query = em.createNamedQuery("Rol.findByName", Rol.class);
+ query.setParameter("name", key);
+ final var r = query.getSingleResult();
+ return MyMapper.INSTANCE.convert(r);
+ }
+
+ @Override
+ public Role find(Long id) {
+ final var r = em.find(Rol.class, id);
+ return MyMapper.INSTANCE.convert(r);
+ }
+
+ @Override
+ public List<Role> findAll() {
+ final var query = em.createNamedQuery("Rol.findAll", Rol.class);
+ final List<Rol> r = query.getResultList();
+ return r.stream().map(MyMapper.INSTANCE::convert).collect(Collectors.toList());
+ }
+}
diff --git a/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/role/RoleDaoLocal.java b/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/role/RoleDaoLocal.java
new file mode 100644
index 0000000..bc75847
--- /dev/null
+++ b/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/role/RoleDaoLocal.java
@@ -0,0 +1,11 @@
+package uy.edu.fing.tse.central.db.dao.role;
+
+import uy.edu.fing.tse.central.db.dao.GenericDao;
+import uy.edu.fing.tse.dto.Role;
+
+import javax.ejb.Local;
+
+@Local
+public interface RoleDaoLocal extends GenericDao<Role> {
+
+}
diff --git a/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/state/StateDAOBean.java b/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/state/StateDAOBean.java
new file mode 100644
index 0000000..9da50e1
--- /dev/null
+++ b/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/state/StateDAOBean.java
@@ -0,0 +1,52 @@
+package uy.edu.fing.tse.central.db.dao.state;
+
+import uy.edu.fing.tse.central.db.entity.Estado;
+import uy.edu.fing.tse.central.db.mapper.MyMapper;
+import uy.edu.fing.tse.dto.State;
+
+import javax.annotation.PostConstruct;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Stateless
+public class StateDAOBean implements StateDaoLocal {
+
+ @PersistenceContext(unitName = "central")
+ private EntityManager em;
+
+ @PostConstruct
+ void init() {
+ //Despues del constructor hace esto
+ }
+
+ @Override
+ public void create(State elem) {
+ final var r = MyMapper.INSTANCE.convert(elem);
+ em.persist(r);
+ em.flush();
+ }
+
+ @Override
+ public State find(String key) {
+ final var query = em.createNamedQuery("Estado.findByValue", Estado.class);
+ query.setParameter("val", key);
+ final var r = query.getSingleResult();
+ return MyMapper.INSTANCE.convert(r);
+ }
+
+ @Override
+ public State find(Long id) {
+ final var e = em.find(Estado.class, id);
+ return MyMapper.INSTANCE.convert(e);
+ }
+
+ @Override
+ public List<State> findAll() {
+ final var query = em.createNamedQuery("Estado.findAll", Estado.class);
+ final List<Estado> r = query.getResultList();
+ return r.stream().map(MyMapper.INSTANCE::convert).collect(Collectors.toList());
+ }
+}
diff --git a/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/state/StateDaoLocal.java b/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/state/StateDaoLocal.java
new file mode 100644
index 0000000..13ab723
--- /dev/null
+++ b/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/state/StateDaoLocal.java
@@ -0,0 +1,11 @@
+package uy.edu.fing.tse.central.db.dao.state;
+
+import uy.edu.fing.tse.central.db.dao.GenericDao;
+import uy.edu.fing.tse.dto.State;
+
+import javax.ejb.Local;
+
+@Local
+public interface StateDaoLocal extends GenericDao<State> {
+
+}
diff --git a/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/user/UserDAOBean.java b/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/user/UserDAOBean.java
index fb1b5e1..711f76a 100644
--- a/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/user/UserDAOBean.java
+++ b/central-db/src/main/java/uy/edu/fing/tse/central/db/dao/user/UserDAOBean.java
@@ -1,8 +1,11 @@
package uy.edu.fing.tse.central.db.dao.user;
+import uy.edu.fing.tse.central.db.entity.Rol;
import uy.edu.fing.tse.central.db.entity.Usuario;
import uy.edu.fing.tse.central.db.mapper.MyMapper;
import uy.edu.fing.tse.dto.User;
+import uy.edu.fing.tse.dto.UserBO;
+import uy.edu.fing.tse.dto.UserFO;
import javax.annotation.PostConstruct;
import javax.ejb.Stateless;
@@ -25,11 +28,26 @@ public class UserDAOBean implements UserDaoLocal {
@Override
public void register(User user) {
+ if (user instanceof UserBO) _register((UserBO) user);
+ else _register((UserFO) user);
+ }
+ public void _register(UserFO user) {
final var newUser = MyMapper.INSTANCE.convert(user);
em.persist(newUser);
em.flush();
+ }
+
+ private void _register(UserBO user) {
+ final var newUser = MyMapper.INSTANCE.convert(user);
+ final var query = em.createNamedQuery("Rol.findByName", Rol.class);
+ query.setParameter("name", user.getRole().getName());
+ final var r = query.getSingleResult();
+ newUser.setRole(r);
+
+ em.persist(newUser);
+ em.flush();
}
@Override
diff --git a/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/Estado.java b/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/Estado.java
index efd22ce..213b120 100644
--- a/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/Estado.java
+++ b/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/Estado.java
@@ -6,6 +6,10 @@ import javax.persistence.*;
* Son los estados para los hechos, Nuevo, aComprobar, enProceso, Verificado, Publicado, Cancelado
*/
@Entity
+@NamedQueries({
+ @NamedQuery(name = "Estado.findAll", query = "select e from Estado e"),
+ @NamedQuery(name = "Estado.findByValue", query = "select e from Estado e where e.value = :val")
+})
public final class Estado {
@Id
diff --git a/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/Periferico.java b/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/Periferico.java
index e795f10..652720d 100644
--- a/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/Periferico.java
+++ b/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/Periferico.java
@@ -13,7 +13,7 @@ import java.util.List;
})
public final class Periferico extends Mecanismo {
- @ManyToMany //todo: verificar que funcione
+ @ManyToMany
private List<Categoria> categories = new ArrayList<>();
@Column(nullable = false)
diff --git a/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/Rol.java b/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/Rol.java
index 2eaa425..e9efedd 100644
--- a/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/Rol.java
+++ b/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/Rol.java
@@ -3,6 +3,10 @@ package uy.edu.fing.tse.central.db.entity;
import javax.persistence.*;
@Entity
+@NamedQueries({
+ @NamedQuery(name = "Rol.findAll", query = "select r from Rol r"),
+ @NamedQuery(name = "Rol.findByName", query = "select r from Rol r where r.name = :name")
+})
public class Rol {
@Id
diff --git a/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/TransicionEstado.java b/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/TransicionEstado.java
index 633e5be..ccd799f 100644
--- a/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/TransicionEstado.java
+++ b/central-db/src/main/java/uy/edu/fing/tse/central/db/entity/TransicionEstado.java
@@ -51,6 +51,7 @@ public class TransicionEstado {
}
public void setFact(Hecho fact) {
+ fact.addHistory(this);
this.fact = fact;
}
diff --git a/central-db/src/test/resources/META-INF/test-persistence.xml b/central-db/src/test/resources/META-INF/test-persistence.xml
index 269e67b..cbc3804 100644
--- a/central-db/src/test/resources/META-INF/test-persistence.xml
+++ b/central-db/src/test/resources/META-INF/test-persistence.xml
@@ -10,7 +10,7 @@
database. Production applications should use a managed datasource. -->
<!-- The datasource is deployed as WEB-INF/test-ds.xml,
you can find it in the source at src/test/resources/test-ds.xml -->
- <jta-data-source>java:jboss/datasources/practicoTestDS</jta-data-source>
+ <jta-data-source>java:jboss/datasources/testDS</jta-data-source>
<properties>
<!-- Properties for Hibernate -->
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
diff --git a/central-db/src/test/resources/test-ds.xml b/central-db/src/test/resources/test-ds.xml
index 9e633a3..a18d2f9 100644
--- a/central-db/src/test/resources/test-ds.xml
+++ b/central-db/src/test/resources/test-ds.xml
@@ -4,8 +4,8 @@
xsi:schemaLocation="http://www.jboss.org/ironjacamar/schema http://docs.jboss.org/ironjacamar/schema/datasources_1_0.xsd">
<!-- The datasource is bound into JNDI at this location. We reference
this in META-INF/test-persistence.xml -->
- <datasource jndi-name="java:jboss/datasources/practicoTestDS"
- pool-name="practico-test" enabled="true"
+ <datasource jndi-name="java:jboss/datasources/testDS"
+ pool-name="test" enabled="true"
use-java-context="true">
<connection-url>jdbc:h2:mem:practico-test;DB_CLOSE_DELAY=-1</connection-url>
<driver>h2</driver>
diff --git a/central-dto/src/main/java/uy/edu/fing/tse/dto/StateHistory.java b/central-dto/src/main/java/uy/edu/fing/tse/dto/StateHistory.java
index 91b6978..a168a32 100644
--- a/central-dto/src/main/java/uy/edu/fing/tse/dto/StateHistory.java
+++ b/central-dto/src/main/java/uy/edu/fing/tse/dto/StateHistory.java
@@ -10,7 +10,6 @@ public final class StateHistory implements Serializable {
private Long id;
private State state;
private User user;
- private Fact fact;
private Date date;
public Long getId() {
@@ -37,14 +36,6 @@ public final class StateHistory implements Serializable {
this.user = user;
}
- public Fact getFact() {
- return fact;
- }
-
- public void setFact(Fact fact) {
- this.fact = fact;
- }
-
public Date getDate() {
return date;
}
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 73b48b7..1092ee4 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
@@ -1,9 +1,7 @@
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 uy.edu.fing.tse.dto.*;
import java.io.Serializable;
import java.util.List;
@@ -15,5 +13,11 @@ public interface Business extends Serializable {
void altaVerificacionMecanismo(CheckMechanism cm);
List<Fact> listarHechos();
+
+ void altaHecho(Fact fact);
+
+ void altaRol(Role role);
+
+ void altaEstado(State state);
}
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 01fd588..88af433 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
@@ -4,9 +4,10 @@ package uy.edu.fing.tse.central.business;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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 uy.edu.fing.tse.central.db.dao.role.RoleDaoLocal;
+import uy.edu.fing.tse.central.db.dao.state.StateDaoLocal;
+import uy.edu.fing.tse.central.db.dao.user.UserDaoLocal;
+import uy.edu.fing.tse.dto.*;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
@@ -21,6 +22,12 @@ public class BusinessBean implements BusinessLocal, BusinessRemote {
@EJB
private FactDaoLocal hechos;
+ @EJB
+ private UserDaoLocal usuarios;
+ @EJB
+ private StateDaoLocal estados;
+ @EJB
+ private RoleDaoLocal roles;
@PostConstruct
void init() {
@@ -42,5 +49,21 @@ public class BusinessBean implements BusinessLocal, BusinessRemote {
return hechos.findAll();
}
+ @Override
+ public void altaHecho(Fact fact) {
+ hechos.create(fact);
+ }
+
+
+ @Override
+ public void altaEstado(State state) {
+ estados.create(state);
+ }
+
+ @Override
+ public void altaRol(Role role) {
+ roles.create(role);
+ }
+
}
diff --git a/central-ejb/src/main/java/uy/edu/fing/tse/central/business/mq/MessageConsumer.java b/central-ejb/src/main/java/uy/edu/fing/tse/central/business/mq/MessageConsumer.java
index c22e493..87c3795 100644
--- a/central-ejb/src/main/java/uy/edu/fing/tse/central/business/mq/MessageConsumer.java
+++ b/central-ejb/src/main/java/uy/edu/fing/tse/central/business/mq/MessageConsumer.java
@@ -11,13 +11,11 @@ import uy.edu.fing.tse.central.business.BusinessLocal;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.EJB;
-import javax.ejb.Singleton;
-import javax.ejb.Startup;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
-@Singleton
-@Startup
+//@Singleton
+//@Startup
public class MessageConsumer {
private static final Logger LOG = LoggerFactory.getLogger(MessageConsumer.class);
diff --git a/central-ejb/src/main/java/uy/edu/fing/tse/central/business/mq/MessageProducer.java b/central-ejb/src/main/java/uy/edu/fing/tse/central/business/mq/MessageProducer.java
index db1b550..cc3b38e 100644
--- a/central-ejb/src/main/java/uy/edu/fing/tse/central/business/mq/MessageProducer.java
+++ b/central-ejb/src/main/java/uy/edu/fing/tse/central/business/mq/MessageProducer.java
@@ -6,11 +6,10 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.annotation.PostConstruct;
-import javax.ejb.Stateless;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
-@Stateless
+//@Stateless
public class MessageProducer {
private static final Logger LOG = LoggerFactory.getLogger(MessageProducer.class);
diff --git a/central-db/src/main/java/uy/edu/fing/tse/central/db/startup/Config.java b/central-ejb/src/main/java/uy/edu/fing/tse/central/business/startup/Config.java
similarity index 75%
rename from central-db/src/main/java/uy/edu/fing/tse/central/db/startup/Config.java
rename to central-ejb/src/main/java/uy/edu/fing/tse/central/business/startup/Config.java
index 0616ecc..9378471 100644
--- a/central-db/src/main/java/uy/edu/fing/tse/central/db/startup/Config.java
+++ b/central-ejb/src/main/java/uy/edu/fing/tse/central/business/startup/Config.java
@@ -1,11 +1,8 @@
-package uy.edu.fing.tse.central.db.startup;
+package uy.edu.fing.tse.central.business.startup;
-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 uy.edu.fing.tse.central.business.BusinessLocal;
+import uy.edu.fing.tse.central.business.security.SecurityLocal;
+import uy.edu.fing.tse.dto.*;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
@@ -19,23 +16,60 @@ import java.util.Date;
public class Config {
@EJB
- private FactDaoLocal hechos;
- private UserDaoLocal users;
+ private BusinessLocal negocio;
+ @EJB
+ private SecurityLocal users;
@PostConstruct
public void start() {
- initUser();
- initFacts();
+ initRole();
+ //initUsers();
+ //initFacts();
}
@PreDestroy
public void stop() {
}
- private void initUser() {
+ private void initRole() {
+ Role e = new Role();
+ e.setName("Admin");
+ negocio.altaRol(e);
+
+ e = new Role();
+ e.setName("Submiter");
+ negocio.altaRol(e);
+
+ e = new Role();
+ e.setName("Checker");
+ negocio.altaRol(e);
+ }
+
+ private void initUsers() {
UserBO u = new UserBO();
u.setPassword("admin");
u.setMail("admin");
+ Role e = new Role();
+ e.setName("Admin");
+ u.setRole(e);
+ users.register(u);
+
+
+ u = new UserBO();
+ u.setPassword("checker");
+ u.setMail("checker");
+ e = new Role();
+ e.setName("Checker");
+ u.setRole(e);
+ users.register(u);
+
+
+ u = new UserBO();
+ u.setPassword("submiter");
+ u.setMail("submiter");
+ e = new Role();
+ e.setName("Submiter");
+ u.setRole(e);
users.register(u);
}
@@ -91,9 +125,9 @@ public class Config {
u.setPassword("admin");
u.setMail("admin");
sh.setUser(u);
- sh.setFact(fact);
+ //sh.setFact(fact);
fact.addHistory(sh);
- hechos.create(fact);
+ negocio.altaHecho(fact);
}
}
}
--
GitLab