Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/EjercitarServer/ejbModule/beans/EjercitarWSBean.java
blob: b006864c464ae32c61dbb451cf4933b42163eb3b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
package beans;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Random;

import javax.ejb.LocalBean;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import smile.Network;

import model.Alumno;
import model.Concepto;
import model.Curso;
import model.Ejercicio;
import model.Tarea;
import model.Tema;

/**
 * Session Bean implementation class EjercitarWS
 */
@WebService
@SOAPBinding(style=SOAPBinding.Style.RPC)
@Remote(EjercitarWSRemote.class)
@Stateless
public class EjercitarWSBean implements EjercitarWSRemote {

    @PersistenceContext 
    EntityManager em;
	/**
     * Default constructor. 
     */
    public EjercitarWSBean() {
        
    }
    
     
	@WebMethod
    public List<Tarea> getTareas(int idAlumno) {
        // TODO Auto-generated method stub
		System.out.println(idAlumno);
		Alumno alumno = em.find(Alumno.class, idAlumno);
		System.out.println(alumno.getApellido());
		Curso curso = alumno.getCurso();
		List<Tarea> listaTareas = curso.getTareaList();
        return (List<Tarea>) listaTareas; 
    }
	
	@WebMethod
	public Ejercicio getSiguienteEjercicio(int idTarea, int idAlumno, int idEjercicio, String respuesta) {
		// TODO Auto-generated method stub
		Tarea tarea = em.find(Tarea.class, idTarea);
		Alumno alumno = em.find(Alumno.class, idAlumno);
		//
		responderEjercicio(idEjercicio, respuesta, alumno);
		
		//
		
		Ejercicio ejercicio = seleccionAleatoria(tarea);
		seleccionUtilidadMax(tarea, alumno);
		System.out.println(ejercicio.getRespuestaList().toString()); // NO BORRAR
        return ejercicio;
	}
	
	private void responderEjercicio(int idEjercicio, String respuesta, Alumno alumno) {
		Ejercicio ejercicio = em.find(Ejercicio.class, idEjercicio);
		Network net1 = new Network();
		String nombreRed = "red_alumno_" + alumno.getIdAlumno() + ".xdsl";
		net1.updateBeliefs();
		String nombreEjercicio = "E" + idEjercicio;
		
		if(respuesta.equals(ejercicio.getIdRespuesta().getDescripcion())){
			net1.setEvidence(nombreEjercicio, "Correcto");
		} else {
			net1.setEvidence(nombreEjercicio, "Incorrecto");
		}
	}
	
	@WebMethod
	public String getText() {
		return "hola mundo";
	}

	private Ejercicio seleccionAleatoria(Tarea tarea) {
		Tema tema = tarea.getTema();
		
		//List<Concepto> = tema.getIdConcepto()
		List<Ejercicio> ejercicios = em.createQuery("SELECT e FROM Ejercicio e").getResultList();
		System.out.println(ejercicios.size());
		Random rnd = new Random();
		int siguienteID = rnd.nextInt(ejercicios.size());
		System.out.println(siguienteID);
		Ejercicio ejercicio = ejercicios.get(siguienteID);
		System.out.println(ejercicio.getEnunciado());
		return ejercicio;
	}
	
	private Ejercicio seleccionUtilidadMax(Tarea tarea, Alumno alumno) {
		Tema tema = tarea.getTema();
		List<Concepto> conceptoList = new ArrayList();		
		conceptoList.add(tema.getIdConcepto()); // CAMBIAR	
		
		// inicializacion
		double utilidadMax = 0;
		Ejercicio ejercicio = null;
		
		for (Concepto concepto : conceptoList) {
			
			//red
			Network net1 = new Network();
			String nombreRed = "red_alumno_" + alumno.getIdAlumno() + ".xdsl";
			System.out.println("redes/" + nombreRed);
			net1.readFile("redes/" + nombreRed);
			net1.updateBeliefs();
			//Network net2 = new Network();
			//net2.readFile("redes/" + nombreRed);
			//red
			
			String nombreConcepto = "C" + concepto.getIdConcepto();
			//prueba de evidencias 1
			
			double [] values = net1.getNodeValue(nombreConcepto);
			System.out.println("values");
			System.out.println(values.toString());
			double pC1 = values[0]; // P(C=1)
			double pC0 = values[1]; // P(C=0)
			
			List<Ejercicio> ejercicios = concepto.getEjercicioList();
			for(Ejercicio ejercicioConcepto : ejercicios){
				String nombreEjercicio = "E" + ejercicioConcepto.getIdEjercicio();
				net1.setEvidence(nombreConcepto, "Conoce");
				net1.updateBeliefs();
				values = net1.getNodeValue(nombreEjercicio);
				double pE1C1 = values[0]; // P(E=1/C=1)
				
				double utilidadParcial1 = pE1C1 * pC1; 
				
				net1.clearEvidence(nombreConcepto);
				net1.updateBeliefs();
				net1.setEvidence(nombreConcepto, "No_conoce");
				net1.updateBeliefs();
				double pE0C0 = values[1]; // P(E=0/C=0)
				
				double utilidadParcial2 = pE0C0 * pC0;
				
				double utilidadMaxParcial = utilidadParcial1 + utilidadParcial2;
				
				if(utilidadMaxParcial > utilidadMax) {
					utilidadMax = utilidadMaxParcial;
					ejercicio = ejercicioConcepto;
				}
			}
		}
		
		return ejercicio;
	}

}