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 0000000000000000000000000000000000000000..b59a80e197bd02352e14cfdd4cf0ad6c5a0ed456 --- /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 0000000000000000000000000000000000000000..bc75847fe1169dc8be6b31f68c06353884c0d995 --- /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 0000000000000000000000000000000000000000..9da50e1a69f0b950a9d2fbb272f93fc3eefdb2cc --- /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 0000000000000000000000000000000000000000..13ab723f16f7cc73541fea06e857b4211fefb3ed --- /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 fb1b5e10bc95b14116f397784cf3523ca95885ec..711f76afbdeb4163c4db1b7a59ae6e95c8c22592 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 efd22ce88927f9c8576685c7be8570e4ed5467cf..213b1204b8738f0c07d0eac461aa980a94c675aa 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 e795f10b334cfeb28aec684e512e58387f6f50b6..652720d942fe75dc7dcb39eeb42fa7d369946216 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 2eaa425a3649b864b3c5c54f969005a4cb032b1d..e9efedde16fd77cd355735d3d1c07f98e022ded4 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 633e5beb8e91650aa0b7b49c1a3dfc393fc93e27..ccd799fb479b432714573ba7043eb00454f540ec 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 269e67bf4d1f110eb78f4530b31aefd187ee17ad..cbc38046111cf6aca6cd8f7824bb38e0a289bd5f 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 9e633a31123e9f9d30550cda6368f73769b93ef1..a18d2f940796e538ad62f7485d6af0eee651847e 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 91b69784a26688c81068cb1b2f1326ac56167c30..a168a3235f81032d1ac2e4ee6307fb6713b58086 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 73b48b7ee7dc90b8cda08a8935aed0df8349e131..1092ee4f45a58a733873a578c55394fa9ef62c8d 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 01fd5884e4e9304598010a6dd068a19c3aa0cf7b..88af433d77fc0806630f58671e4ab94b850790d1 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 c22e493e5ad0d07a488797f2f6fa0a27f34b1907..87c37953ff89a108f97df1c084efff818f582a10 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 db1b550d63cd303b720063cc1a2da48e378b8ac5..cc3b38efcb472dd9eda5546c54806d63625d509c 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 0616ecc878fbc7d5bd5cf74ee77b0d1d2ff46c53..93784719bfa039eb10b126e41293decdcecfc8ec 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); } } }