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