diff --git a/Servidor JEE/src/main/java/edu/proygrado/dto/BackupAlumnoDTO.java b/Servidor JEE/src/main/java/edu/proygrado/dto/BackupAlumnoDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..f498fe23c480c1625757769c4b4baeb7c3fc2438 --- /dev/null +++ b/Servidor JEE/src/main/java/edu/proygrado/dto/BackupAlumnoDTO.java @@ -0,0 +1,69 @@ +package edu.proygrado.dto; + +import java.util.ArrayList; +import java.util.List; + +import edu.proygrado.modelo.Alumno; +import edu.proygrado.modelo.Archivo; +import edu.proygrado.modelo.Grupo; + +public class BackupAlumnoDTO extends BackupUsuarioDTO{ + + List<ArchivoDTO> archivos; + List<ArchivoDTO> archivosCompartidos; + + List<GrupoDTO> grupos; + + public BackupAlumnoDTO() { + } + + public BackupAlumnoDTO(Alumno alumno, List<Grupo> grupos) { + super(alumno); + + this.archivos = new ArrayList<>(); + + for (Archivo archivo : alumno.getArchivos()) { + this.archivos.add(new ArchivoDTO(archivo)); + } + this.archivosCompartidos = new ArrayList<>(); + + for (Archivo archivo : alumno.getArchivosCompartidos()) { + this.archivosCompartidos.add(new ArchivoDTO(archivo)); + } + + this.grupos = new ArrayList<>(); + for (Grupo grupo : grupos) { + GrupoDTO grupoDTO = new GrupoDTO(); + grupoDTO.setAnio(grupo.getGrupoPK().getAnio()); + grupoDTO.setGrado(grupo.getGrupoPK().getGrado()); + grupoDTO.setGrupo(grupo.getGrupoPK().getGrupo()); + grupoDTO.setLiceoId(grupo.getGrupoPK().getLiceo().getLiceoId()); + this.grupos.add(grupoDTO); + } + } + + public List<ArchivoDTO> getArchivos() { + return archivos; + } + + public void setArchivos(List<ArchivoDTO> archivos) { + this.archivos = archivos; + } + + public List<ArchivoDTO> getArchivosCompartidos() { + return archivosCompartidos; + } + + public void setArchivosCompartidos(List<ArchivoDTO> archivosCompartidos) { + this.archivosCompartidos = archivosCompartidos; + } + + public List<GrupoDTO> getGrupos() { + return grupos; + } + + public void setGrupos(List<GrupoDTO> grupos) { + this.grupos = grupos; + } + +} diff --git a/Servidor JEE/src/main/java/edu/proygrado/dto/BackupDocenteDTO.java b/Servidor JEE/src/main/java/edu/proygrado/dto/BackupDocenteDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..54dbddaacb1e62cb52e57e35c5bf8ae948ce63f4 --- /dev/null +++ b/Servidor JEE/src/main/java/edu/proygrado/dto/BackupDocenteDTO.java @@ -0,0 +1,51 @@ +package edu.proygrado.dto; + +import java.util.ArrayList; +import java.util.List; + +import edu.proygrado.modelo.Archivo; +import edu.proygrado.modelo.Docente; +import edu.proygrado.modelo.Grupo; + +public class BackupDocenteDTO extends BackupUsuarioDTO{ + + List<GrupoDTO> gruposAsignados; + List<ArchivoDTO> archivos; + + public BackupDocenteDTO(){} + + public BackupDocenteDTO(Docente docente){ + super(docente); + + this.gruposAsignados = new ArrayList<>(); + for(Grupo grupo: docente.getGruposAsignados()){ + GrupoDTO grupoDTO = new GrupoDTO(); + grupoDTO.setAnio(grupo.getGrupoPK().getAnio()); + grupoDTO.setGrado(grupo.getGrupoPK().getGrado()); + grupoDTO.setGrupo(grupo.getGrupoPK().getGrupo()); + grupoDTO.setLiceoId(grupo.getGrupoPK().getLiceo().getLiceoId()); + this.gruposAsignados.add(grupoDTO); + } + this.archivos = new ArrayList<>(); + for(Archivo archivo: docente.getArchivos()){ + this.archivos.add(new ArchivoDTO(archivo)); + } + } + + public List<GrupoDTO> getGruposAsignados() { + return gruposAsignados; + } + + public void setGruposAsignados(List<GrupoDTO> gruposAsignados) { + this.gruposAsignados = gruposAsignados; + } + + public List<ArchivoDTO> getArchivos() { + return archivos; + } + + public void setArchivos(List<ArchivoDTO> archivos) { + this.archivos = archivos; + } + +} diff --git a/Servidor JEE/src/main/java/edu/proygrado/dto/BackupUsuarioDTO.java b/Servidor JEE/src/main/java/edu/proygrado/dto/BackupUsuarioDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..1241d8e43c4d270db57dd66bf51a580e735e76b3 --- /dev/null +++ b/Servidor JEE/src/main/java/edu/proygrado/dto/BackupUsuarioDTO.java @@ -0,0 +1,78 @@ +package edu.proygrado.dto; + +import edu.proygrado.modelo.Alumno; +import edu.proygrado.modelo.Usuario; + +public class BackupUsuarioDTO { + String rol; + String cedula; + String nombre; + String apellido; + String password; + ConfiguracionDTO configuracion; + + public BackupUsuarioDTO(){} + + public BackupUsuarioDTO(Usuario usuario){ + if (usuario instanceof Alumno) { + this.rol = "Alumno"; + }else{ + this.rol = "Docente"; + } + this.cedula = usuario.getCedula(); + this.nombre = usuario.getNombre(); + this.apellido = usuario.getApellido(); + this.password = usuario.getPassword(); + this.configuracion = new ConfiguracionDTO(usuario.getConfiguracion()); + } + + public String getRol() { + return rol; + } + + public void setRol(String rol) { + this.rol = rol; + } + + public String getCedula() { + return cedula; + } + + public void setCedula(String cedula) { + this.cedula = cedula; + } + + public String getNombre() { + return nombre; + } + + public void setNombre(String nombre) { + this.nombre = nombre; + } + + public String getApellido() { + return apellido; + } + + public void setApellido(String apellido) { + this.apellido = apellido; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public ConfiguracionDTO getConfiguracion() { + return configuracion; + } + + public void setConfiguracion(ConfiguracionDTO configuracion) { + this.configuracion = configuracion; + } + + +} diff --git a/Servidor JEE/src/main/java/edu/proygrado/ejb/UsuarioEJB.java b/Servidor JEE/src/main/java/edu/proygrado/ejb/UsuarioEJB.java index edcf394d050bdd1dff6ed875e59bb0734f1b260b..4ec0ddbb6fe7d968973191a7f113cc67fb7a4162 100644 --- a/Servidor JEE/src/main/java/edu/proygrado/ejb/UsuarioEJB.java +++ b/Servidor JEE/src/main/java/edu/proygrado/ejb/UsuarioEJB.java @@ -1,11 +1,29 @@ package edu.proygrado.ejb; +import java.util.ArrayList; +import java.util.List; + import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; +import edu.proygrado.dto.ArchivoDTO; +import edu.proygrado.dto.BackupAlumnoDTO; +import edu.proygrado.dto.BackupDocenteDTO; +import edu.proygrado.dto.BackupUsuarioDTO; import edu.proygrado.dto.ConfiguracionDTO; +import edu.proygrado.dto.EvaluacionDTO; +import edu.proygrado.dto.GrupoDTO; +import edu.proygrado.matefun.MatefunException; +import edu.proygrado.modelo.Alumno; +import edu.proygrado.modelo.Archivo; import edu.proygrado.modelo.Configuracion; +import edu.proygrado.modelo.Docente; +import edu.proygrado.modelo.EstadoArchivo; +import edu.proygrado.modelo.Evaluacion; +import edu.proygrado.modelo.Grupo; +import edu.proygrado.modelo.GrupoPK; +import edu.proygrado.modelo.LiceoPK; import edu.proygrado.modelo.Usuario; @Stateless @@ -53,5 +71,312 @@ public class UsuarioEJB { } } + + public BackupUsuarioDTO respaldarUsuario(String cedula) throws MatefunException{ + Usuario usuario = em.find(Usuario.class, cedula); + if(usuario == null){ + throw new MatefunException("No existe el usuario con cedula "+cedula); + } + if(usuario instanceof Alumno){ + List<Grupo> grupos = em.createQuery("select g from Grupo g where exists (select al from g.alumnos al where al.cedula =:cedula )", Grupo.class) + .setParameter("cedula", cedula) + .getResultList(); + return new BackupAlumnoDTO((Alumno) usuario,grupos); + }else{ + return new BackupDocenteDTO((Docente) usuario); + } + } + + public String restaurarAlumno(BackupAlumnoDTO backupAlumnoDTO) throws MatefunException { + Usuario usuario = em.find(Usuario.class, backupAlumnoDTO.getCedula()); + if(usuario!=null){ + throw new MatefunException("Ya existe el usuario de cedula "+backupAlumnoDTO.getCedula()); + } + Alumno alumno = new Alumno(); + alumno.setCedula(backupAlumnoDTO.getCedula()); + alumno.setNombre(backupAlumnoDTO.getNombre()); + alumno.setApellido(backupAlumnoDTO.getApellido()); + alumno.setPassword(backupAlumnoDTO.getPassword()); + alumno.setArchivos(new ArrayList<>()); + alumno.setArchivosCompartidos(new ArrayList<>()); + Configuracion config = new Configuracion(backupAlumnoDTO.getConfiguracion()); + em.persist(config); + alumno.setConfiguracion(config); + if(backupAlumnoDTO.getGrupos()!=null){ + for(GrupoDTO grupoDTO: backupAlumnoDTO.getGrupos()){ + LiceoPK lpk = new LiceoPK(grupoDTO.getLiceoId()); + GrupoPK gpk = new GrupoPK(grupoDTO.getAnio(), grupoDTO.getGrado(), grupoDTO.getGrupo(), lpk); + Grupo grupo = em.find(Grupo.class, gpk); + grupo.addAlumno(alumno); + } + } + if(backupAlumnoDTO.getArchivos()!=null){ + Archivo root = null; + for(ArchivoDTO archivoDTO : backupAlumnoDTO.getArchivos()){ + Archivo archivo = new Archivo(); + archivo.setArchivoOrigen(null); + archivo.setContenido(archivoDTO.getContenido()); + archivo.setDirectorio(archivoDTO.isDirectorio()); + archivo.setEditable(archivoDTO.isEditable()); + archivo.setEliminado(archivoDTO.isEliminado()); + archivo.setEstado(EstadoArchivo.valueOf(archivoDTO.getEstado())); + archivo.setFechaCreacion(archivoDTO.getFechaCreacion()); + archivo.setNombre(archivoDTO.getNombre()); + archivo.setCreador(alumno); + if(archivoDTO.getEvaluacion()!=null){ + EvaluacionDTO evalDTO = archivoDTO.getEvaluacion(); + Docente docente = em.find(Docente.class, evalDTO.getCedulaDocente()); + if(docente!=null){ + Evaluacion eval = new Evaluacion(); + eval.setDescripcion(evalDTO.getDescripcion()); + eval.setFecha(evalDTO.getFecha()); + eval.setNota(evalDTO.getNota()); + eval.setDocente(docente); + archivo.setEvaluacion(eval); + } + } + if(archivoDTO.getPadreId() == -1){ + root = archivo; + root.setPadre(null); + } + alumno.addArchivo(archivo); + } + for(Archivo archivo : alumno.getArchivos()){ + if(archivo != root){ + archivo.setPadre(root); + } + em.persist(archivo); + } + } + if(backupAlumnoDTO.getArchivosCompartidos()!=null){ + for(ArchivoDTO archivoDTO : backupAlumnoDTO.getArchivosCompartidos()){ + Archivo archivo = new Archivo(); + Archivo origen = em.find(Archivo.class, archivoDTO.getId()); + archivo.setArchivoOrigen(origen); + archivo.setContenido(archivoDTO.getContenido()); + archivo.setDirectorio(archivoDTO.isDirectorio()); + archivo.setEditable(archivoDTO.isEditable()); + archivo.setEliminado(archivoDTO.isEliminado()); + archivo.setEstado(EstadoArchivo.valueOf(archivoDTO.getEstado())); + archivo.setFechaCreacion(archivoDTO.getFechaCreacion()); + archivo.setNombre(archivoDTO.getNombre()); + if(origen!=null){ + Docente creador = em.find(Docente.class, archivoDTO.getCedulaCreador()); + if(creador!=null){ + archivo.setCreador(creador); + }else{ + archivo.setCreador(alumno); + } + } + if(archivoDTO.getEvaluacion()!=null){ + EvaluacionDTO evalDTO = archivoDTO.getEvaluacion(); + Docente docente = em.find(Docente.class, evalDTO.getCedulaDocente()); + if(docente!=null){ + Evaluacion eval = new Evaluacion(); + eval.setDescripcion(evalDTO.getDescripcion()); + eval.setFecha(evalDTO.getFecha()); + eval.setNota(evalDTO.getNota()); + eval.setDocente(docente); + archivo.setEvaluacion(eval); + em.persist(eval); + } + } + archivo.setPadre(null); + //Si esta definido el archivo origen lo agrego a los compartidos + //sino se agrega a la lista de archivos del usuario. + if(origen!=null){ + alumno.addArchivoCompartido(archivo); + }else{ + alumno.addArchivo(archivo); + } + em.persist(archivo); + } + + } + em.persist(alumno); + return "Alumno ingresado. "; + } + + public String restaurarDocente(BackupDocenteDTO backupDocenteDTO) throws MatefunException { + Usuario usuario = em.find(Usuario.class, backupDocenteDTO.getCedula()); + if(usuario!=null){ + throw new MatefunException("Ya existe el usuario de cedula "+backupDocenteDTO.getCedula()); + } + Docente docente = new Docente(); + docente.setCedula(backupDocenteDTO.getCedula()); + docente.setNombre(backupDocenteDTO.getNombre()); + docente.setApellido(backupDocenteDTO.getApellido()); + docente.setPassword(backupDocenteDTO.getPassword()); + docente.setArchivos(new ArrayList<>()); + docente.setGruposAsignados(new ArrayList<>()); + Configuracion config = new Configuracion(backupDocenteDTO.getConfiguracion()); + em.persist(config); + docente.setConfiguracion(config); + if(backupDocenteDTO.getGruposAsignados()!=null){ + for(GrupoDTO grupoDTO: backupDocenteDTO.getGruposAsignados()){ + LiceoPK lpk = new LiceoPK(grupoDTO.getLiceoId()); + GrupoPK gpk = new GrupoPK(grupoDTO.getAnio(), grupoDTO.getGrado(), grupoDTO.getGrupo(), lpk); + Grupo grupo = em.find(Grupo.class, gpk); + docente.addGrupoAsignado(grupo); + } + } + if(backupDocenteDTO.getArchivos()!=null){ + Archivo root = null; + for(ArchivoDTO archivoDTO : backupDocenteDTO.getArchivos()){ + Archivo archivo = new Archivo(); + archivo.setArchivoOrigen(null); + archivo.setContenido(archivoDTO.getContenido()); + archivo.setDirectorio(archivoDTO.isDirectorio()); + archivo.setEditable(archivoDTO.isEditable()); + archivo.setEliminado(archivoDTO.isEliminado()); + archivo.setEstado(EstadoArchivo.valueOf(archivoDTO.getEstado())); + archivo.setFechaCreacion(archivoDTO.getFechaCreacion()); + archivo.setNombre(archivoDTO.getNombre()); + archivo.setCreador(docente); + //No se deberia dar el caso. Se deja por completitud + if(archivoDTO.getEvaluacion()!=null){ + EvaluacionDTO evalDTO = archivoDTO.getEvaluacion(); + Docente evaluador = em.find(Docente.class, evalDTO.getCedulaDocente()); + if(evaluador!=null){ + Evaluacion eval = new Evaluacion(); + eval.setDescripcion(evalDTO.getDescripcion()); + eval.setFecha(evalDTO.getFecha()); + eval.setNota(evalDTO.getNota()); + eval.setDocente(evaluador); + archivo.setEvaluacion(eval); + em.persist(eval); + } + } + if(archivoDTO.getPadreId() == -1){ + root = archivo; + root.setPadre(null); + } + docente.addArchivo(archivo); + em.persist(archivo); + } + for(Archivo archivo : docente.getArchivos()){ + if(archivo != root){ + archivo.setPadre(root); + } + } + } + em.persist(docente); + return "Docente ingresado. "; + } + + public String eliminarUsuario(String cedula) throws MatefunException { + Usuario usuario = em.find(Usuario.class, cedula); + if(usuario == null){ + throw new MatefunException("No existe el usuario con cedula "+cedula); + } + if(usuario instanceof Alumno){ + Alumno alumno = (Alumno) usuario; + List<Grupo> grupos = em.createQuery("select g from Grupo g where exists (select al from g.alumnos al where al.cedula =:cedula )", Grupo.class) + .setParameter("cedula", cedula) + .getResultList(); + for(Grupo grupo : grupos){ + grupo.getAlumnos().remove(alumno); + grupo.getArchivos().removeAll(alumno.getArchivos()); + } + System.out.println("Alumno"); + for(Archivo archivo: alumno.getArchivos()){ + System.out.println(archivo.getId()); + Evaluacion eval = archivo.getEvaluacion(); + if(eval!=null){ + eval.setDocente(null); + em.remove(eval); + } + archivo.setArchivoOrigen(null); + archivo.setCreador(null); + archivo.setEvaluacion(null); + archivo.setPadre(null); + em.remove(archivo); + } + alumno.setArchivos(null); + System.out.println("Compartidos"); + for(Archivo archivo: alumno.getArchivosCompartidos()){ + System.out.println(archivo.getId()); + Evaluacion eval = archivo.getEvaluacion(); + if(eval!=null){ + eval.setDocente(null); + em.remove(eval); + } + archivo.setArchivoOrigen(null); + archivo.setCreador(null); + archivo.setEvaluacion(null); + archivo.setPadre(null); + em.remove(archivo); + } + alumno.setArchivosCompartidos(null); + //Codigo para corregir bug de archivos creados por el alumno pero no referenciados en su lista de archivos. + List<Archivo> archivosNoReferenciados = em.createQuery("select a from Archivo a where a.creador.cedula = :cedula",Archivo.class) + .setParameter("cedula", cedula) + .getResultList(); + for(Archivo archivo: archivosNoReferenciados){ + System.out.println(archivo.getId()); + Evaluacion eval = archivo.getEvaluacion(); + if(eval!=null){ + eval.setDocente(null); + em.remove(eval); + } + archivo.setArchivoOrigen(null); + archivo.setCreador(null); + archivo.setEvaluacion(null); + archivo.setPadre(null); + em.remove(archivo); + } + + em.remove(alumno); + }else{ + Docente docente = (Docente) usuario; + + for(Archivo archivo: docente.getArchivos()){ + archivo.setPadre(null); + List<Grupo> grupos = em.createQuery("select g from Grupo g where exists (select a from g.archivos a where a.id=:id)",Grupo.class) + .setParameter("id", archivo.getId()) + .getResultList(); + for(Grupo g : grupos){ + g.getArchivos().remove(archivo); + } + + System.out.println("Archivo docente "+archivo.getId()); + Evaluacion eval = archivo.getEvaluacion(); + if(eval!=null){ + eval.setDocente(null); + em.remove(eval); + } + //Lista de archivos que son copia del compartido por el docente. + List<Archivo> archivos = em.createQuery("select a from Archivo a where a.archivoOrigen.id = :id", Archivo.class ) + .setParameter("id", archivo.getId()) + .getResultList(); + for(Archivo copiaAlumno : archivos){ + System.out.println("copia archivo "+copiaAlumno.getId()); + List<Alumno> alumnos = em.createQuery("select a from Alumno a where exists (select ac from a.archivosCompartidos ac where ac.id = :id)",Alumno.class) + .setParameter("id", copiaAlumno.getId()) + .getResultList(); + + //Los archivos compartidos que tiene el alumno se mueven a su lista de archivos personales. + for(Alumno alumno : alumnos){ + alumno.getArchivosCompartidos().remove(copiaAlumno); + Archivo root = em.createQuery("select a from Archivo a where a.padre = null and a.creador.cedula=:cedula",Archivo.class) + .setParameter("cedula", alumno.getCedula()) + .getSingleResult(); + copiaAlumno.setPadre(root); + copiaAlumno.setCreador(alumno); + copiaAlumno.setEstado(EstadoArchivo.Edicion); + copiaAlumno.setArchivoOrigen(null); + alumno.addArchivo(copiaAlumno); + } + } + } + + for(Archivo archivo:docente.getArchivos()){ + em.remove(archivo); + } + em.remove(docente); + } + + return "Usuario y recursos eliminados"; + } } diff --git a/Servidor JEE/src/main/java/edu/proygrado/servicios/usuario/UsuarioRS.java b/Servidor JEE/src/main/java/edu/proygrado/servicios/usuario/UsuarioRS.java index 03bf8ee4b2f73e933adf5c0358eaa95a5e248e76..16822ae36d96f5f617a3badcc0a1e034055e83fa 100644 --- a/Servidor JEE/src/main/java/edu/proygrado/servicios/usuario/UsuarioRS.java +++ b/Servidor JEE/src/main/java/edu/proygrado/servicios/usuario/UsuarioRS.java @@ -3,13 +3,21 @@ package edu.proygrado.servicios.usuario; import javax.ejb.EJB; import javax.ejb.Stateless; import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.POST; import javax.ws.rs.PUT; import javax.ws.rs.Path; +import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; +import edu.proygrado.dto.BackupAlumnoDTO; +import edu.proygrado.dto.BackupDocenteDTO; +import edu.proygrado.dto.BackupUsuarioDTO; import edu.proygrado.dto.ConfiguracionDTO; import edu.proygrado.ejb.UsuarioEJB; +import edu.proygrado.matefun.MatefunException; @Stateless @Path("/usuario") @@ -21,11 +29,41 @@ public class UsuarioRS { @Path("{cedula}/configuracion") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) - public ConfiguracionDTO actualizarConfiguracion(@javax.ws.rs.PathParam("cedula") String cedula, ConfiguracionDTO configuracion) throws Exception { + public ConfiguracionDTO actualizarConfiguracion(@PathParam("cedula") String cedula, ConfiguracionDTO configuracion) throws Exception { if(cedula.toLowerCase().equals("invitado")){ return configuracion; }else{ return usuarioEJB.actualizarConfiguracion(cedula,configuracion); } } + + @GET + @Path("{cedula}/backup") + @Produces(MediaType.APPLICATION_JSON) + public BackupUsuarioDTO backupUsuario(@PathParam("cedula") String cedula) throws MatefunException{ + return usuarioEJB.respaldarUsuario(cedula); + } + + @POST + @Path("alumno/restore") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public String restaurarAlumno(BackupAlumnoDTO backupAlumnoDTO) throws MatefunException{ + return usuarioEJB.restaurarAlumno(backupAlumnoDTO); + } + + @POST + @Path("docente/restore") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public String restaurarDocente(BackupDocenteDTO backupDocenteDTO) throws MatefunException{ + return usuarioEJB.restaurarDocente(backupDocenteDTO); + } + + @DELETE + @Path("{cedula}") + @Produces(MediaType.TEXT_PLAIN) + public String eliminarUsuario(@PathParam("cedula") String cedula) throws MatefunException { + return usuarioEJB.eliminarUsuario(cedula); + } }