package beans; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Random; import javax.ejb.EJB; import javax.ejb.LocalBean; import javax.ejb.Remote; import javax.ejb.Stateless; import javax.ejb.TransactionAttribute; import javax.ejb.TransactionAttributeType; import javax.ejb.TransactionManagement; import javax.jws.WebMethod; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; import model.Alumno; import model.Asignatura; import model.Curso; import model.Ejercicio; import model.Respuesta; import model.Tarea; @Stateless @LocalBean @WebService @SOAPBinding(style = SOAPBinding.Style.RPC) @Remote(SimulacionBeanRemote.class) public class SimulacionBean { @EJB AdministracionBeanRemote admin; @EJB EjercitarWSRemote ws; @EJB SimulacionBean thisSimular; public Alumno crearAlumno(Curso curso, Double tipo, Integer id){ Alumno alumno = new Alumno(); // Integer idAlumno = admin.obtenerIdAlumno() + 1; alumno.setNombre("nom_" + id); alumno.setApellido("ape_" + id); alumno.setSerial(123456); alumno.setCurso(curso); alumno.setTipoAlumno(tipo); alumno = admin.agregarAlumno(alumno); return alumno; } public Integer crearSesion(Integer idAlumno, Integer idTarea){ String [] estados = {"triste","enamorado","suenho","feliz"}; Random rnd = new Random(); int estado = rnd.nextInt(4); int ayuda = rnd.nextInt(2); int hogar = rnd.nextInt(2); String estadoAnimo = estados[estado]; Boolean ayudaPadres = (ayuda == 0) ? true:false; Boolean desdeHogar = (hogar ==0) ? true:false; Integer idSesion = ws.registrarSesion(idAlumno, idTarea, ayudaPadres, desdeHogar, estadoAnimo); return idSesion; } @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) public List generacionAlumnos(Asignatura asignatura){ Curso curso = asignatura.getCurso(); int cantidadAlumnos = 30; Double tipo; List alumnos = new ArrayList(); for (int i = 0; i < cantidadAlumnos; i++) { if(i <= 10){ tipo = TipoAlumno.NIVEL_CONOCIMIENTO_BAJO; }else if(i > 10 && i<=20){ tipo = TipoAlumno.NIVEL_CONOCIMIENTO_MEDIO; }else{ tipo = TipoAlumno.NIVEL_CONOCIMIENTO_ALTO; } Alumno alumno = crearAlumno(curso, tipo, i); alumnos.add(alumno); } admin.crearRedAlumnos(asignatura.getIdAsignatura()); return alumnos; } @WebMethod public void simular() { Asignatura asignatura = admin.obtenerAsignatura(3); Tarea tarea = admin.obtenerTarea(4); List alumnos = thisSimular.generacionAlumnos(asignatura); System.out.println("##########alumnos creados######" + alumnos.size()); int cont = 0; for(Alumno alumno : alumnos) { thisSimular.simularAlumno(alumno, tarea, asignatura); System.out.println("---------------alumno simulado nro: " + ++cont + "----------------------"); } // crearArchivo(datos); } @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) public void simularAlumno(Alumno alumno, Tarea tarea, Asignatura asignatura){ System.out.println("tarea: " + tarea.getIdTarea() + "alumno: " + alumno.getIdAlumno()); Integer idSesion = crearSesion(alumno.getIdAlumno(), tarea.getIdTarea()); System.out.println("##########sesion creada ######"); String siguienteEjercicio = ws.getSiguienteEjercicio(tarea.getIdTarea(), alumno.getIdAlumno(), 0, "respuesta"); Boolean parada = false; int cant = 0; Random rnd = new Random(); for (int i = 0; i < tarea.getCantidadEjercicioParada(); i++) { String [] ejercicioString = siguienteEjercicio.split("#"); Integer idEjercicio = Integer.valueOf(ejercicioString[0]); Ejercicio ejercicio = admin.obtenerEjercicio(idEjercicio); int decision = rnd.nextInt(100); String respuesta = null; int idRespuesta; Boolean respuestaCorrecta = false; if(decision <= (alumno.getTipoAlumno()*100)) { respuesta = ejercicio.getRespuesta().getDescripcion(); idRespuesta = ejercicio.getRespuesta().getIdRespuesta(); respuestaCorrecta = true; } else { List respuestas = admin.obtenerRespuestas(ejercicio); respuesta = respuestas.get(0).equals(ejercicio.getRespuesta()) ? respuestas.get(1).getDescripcion() : respuestas.get(0).getDescripcion(); /*idRespuesta = ejercicio.getRespuestaList().get(0).equals(ejercicio.getRespuesta()) ? ejercicio.getRespuestaList().get(1).getIdRespuesta() : ejercicio.getRespuestaList().get(0).getIdRespuesta(); */ respuestas.clear(); } siguienteEjercicio = ws.getSiguienteEjercicio(tarea.getIdTarea(), alumno.getIdAlumno(), ejercicio.getIdEjercicio(), respuesta); //Asignatura asignatura, Integer idAlumno, Integer idEjercicio, Boolean respuesta ArrayList fila = admin.registrarEjercicio(asignatura, alumno.getIdAlumno(), ejercicio, respuestaCorrecta,i,alumno.getTipoAlumno().toString()); //datos.add(fila); crearArchivo(fila); fila.clear(); } ws.terminarTarea(idSesion); } private void crearArchivo(ArrayList fila) { File archivo = new File("prueba_tarea.csv"); FileWriter escribir; try { escribir = new FileWriter(archivo,true); String idList = fila.toString(); String csv = idList.substring(1, idList.length() - 1).replace(", ", ","); escribir.write(csv); escribir.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static class TipoAlumno { public static final Double NIVEL_CONOCIMIENTO_BAJO = 0.1; public static final Double NIVEL_CONOCIMIENTO_MEDIO = 0.5; public static final Double NIVEL_CONOCIMIENTO_ALTO = 0.9; } }