|
5 | 5 | import static Colmena.Utilidades.runWithBlock; |
6 | 6 |
|
7 | 7 | public class Inspeccion implements Serializable { |
| 8 | + // Atributos de la clase Inspección, guardamos la fecha de la inspección, el resultado y las acciones recomendadas. |
8 | 9 | public Date fecha; |
9 | 10 | public String resultado; |
10 | 11 | public String acciones; |
11 | 12 |
|
| 13 | + // Constructor que inicializa la inspección con los valores proporcionados. |
12 | 14 | public Inspeccion(Date fecha, String resultado, String acciones) { |
13 | 15 | this.fecha = fecha; |
14 | 16 | this.resultado = resultado; |
15 | 17 | this.acciones = acciones; |
16 | 18 | } |
17 | 19 |
|
| 20 | + // Método recursivo para generar la información de inspecciones de una lista, con sangría según el nivel de profundidad. |
18 | 21 | public static String getInfo(List<Inspeccion> inspecciones, int nivel) { |
19 | 22 | if (inspecciones.isEmpty()) { |
20 | | - return ""; |
| 23 | + return ""; // Caso base: si no hay más inspecciones, devolvemos una cadena vacía. |
21 | 24 | } |
22 | | - Inspeccion inspeccion = inspecciones.getFirst(); |
23 | | - String result = " ".repeat(nivel * 4) + |
| 25 | + |
| 26 | + // Obtenemos la primera inspección y construimos el resultado formateado. |
| 27 | + Inspeccion inspeccion = inspecciones.get(0); |
| 28 | + String result = " ".repeat(nivel * 4) + // Añadimos sangría dinámica según el nivel de profundidad. |
24 | 29 | String.format("📅 Fecha: %s\n", inspeccion.fecha) + |
25 | 30 | " ".repeat(nivel * 4) + |
26 | 31 | String.format("🔍 Resultado: %s\n", inspeccion.resultado) + |
27 | 32 | " ".repeat(nivel * 4) + |
28 | 33 | String.format("🛠️ Acciones: %s\n", inspeccion.acciones); |
29 | 34 |
|
| 35 | + // Si hay más inspecciones, agregamos una línea divisoria. |
30 | 36 | if (inspecciones.size() > 1) { |
31 | 37 | result += " ".repeat(nivel * 4) + "----------------------------------\n"; |
32 | 38 | } |
33 | 39 |
|
| 40 | + // Llamada recursiva para las siguientes inspecciones, aumentando el nivel de sangría. |
34 | 41 | return result + getInfo(inspecciones.subList(1, inspecciones.size()), nivel + 1); |
35 | 42 | } |
36 | 43 |
|
| 44 | + // Método para realizar inspecciones en una lista de colmenas, con concurrencia y manejo de hilos. |
37 | 45 | public static void realizarInspecciones(List<Colmena> colmenas) { |
| 46 | + // Si no hay colmenas, informamos al usuario y terminamos el proceso. |
38 | 47 | if (colmenas.isEmpty()) { |
39 | 48 | runWithBlock(() -> Utilidades.printWithDelay("⚠️ No hay colmenas registradas para inspeccionar.\n", 50)); |
40 | 49 | return; |
41 | 50 | } |
42 | 51 |
|
| 52 | + // Listas para almacenar los hilos de ejecución y los mensajes de resultado de cada inspección. |
43 | 53 | List<Thread> hilos = new ArrayList<>(); |
44 | 54 | List<String> mensajesResultado = Collections.synchronizedList(new ArrayList<>()); |
45 | 55 |
|
| 56 | + // Iteramos sobre cada colmena para crear un hilo que realice la inspección. |
46 | 57 | for (Colmena colmena : colmenas) { |
47 | 58 | Thread hilo = new Thread(() -> { |
48 | 59 | try { |
| 60 | + // Mostramos un mensaje de inicio de la inspección para cada colmena. |
49 | 61 | runWithBlock(() -> Utilidades.printWithDelay("🕵️ Inspeccionando la colmena " + colmena.id + "...", 50)); |
50 | 62 |
|
| 63 | + // Simulamos el tiempo de inspección con un retraso aleatorio entre 500ms y 1500ms. |
51 | 64 | Random random = new Random(); |
52 | 65 | int tiempoInspeccion = random.nextInt(1000) + 500; |
53 | 66 | Thread.sleep(tiempoInspeccion); |
54 | 67 |
|
| 68 | + // Cálculo de puntos para determinar el estado de la colmena, basado en su abeja reina y el estado general. |
55 | 69 | int estadoPuntos = (colmena.abejaReina != null && colmena.abejaReina.estadoSalud.equals("Buena")) ? 2 : 0; |
56 | 70 | estadoPuntos += switch (colmena.estadoSalud) { |
57 | 71 | case "Buena" -> 2; |
58 | 72 | case "Regular" -> 1; |
59 | 73 | default -> 0; |
60 | 74 | }; |
61 | 75 |
|
| 76 | + // Evaluamos el estado de la colmena en función de los puntos obtenidos. |
62 | 77 | String resultado = estadoPuntos >= 3 ? "Estado óptimo" : |
63 | 78 | estadoPuntos == 2 ? "Necesita monitoreo" : "Urgente atención"; |
64 | 79 |
|
| 80 | + // Definimos las acciones a tomar dependiendo del resultado de la inspección. |
65 | 81 | String acciones = switch (resultado) { |
66 | 82 | case "Estado óptimo" -> "Revisión en 6 meses"; |
67 | 83 | case "Necesita monitoreo" -> "Revisar en 3 meses"; |
68 | 84 | default -> "Reparaciones urgentes y suplementar alimentación"; |
69 | 85 | }; |
70 | 86 |
|
| 87 | + // Creamos un objeto Inspección con la fecha actual y los resultados. |
71 | 88 | Inspeccion inspeccion = new Inspeccion(new Date(), resultado, acciones); |
72 | 89 | colmena.agregarInspeccion(inspeccion); |
73 | 90 |
|
| 91 | + // Determinamos el mensaje final según el resultado de la inspección. |
74 | 92 | String mensajeFin = resultado.equals("Estado óptimo") |
75 | 93 | ? "\r✅ Inspección completada con éxito para la colmena " + colmena.id + "." |
76 | 94 | : "\r⚠️ La inspección terminó con algunos problemas para la colmena " + colmena.id + "."; |
77 | 95 |
|
| 96 | + // Añadimos el mensaje a la lista de resultados. |
78 | 97 | mensajesResultado.add("\n" + mensajeFin); |
79 | 98 | } catch (InterruptedException e) { |
| 99 | + // En caso de error durante la inspección, mostramos un mensaje de error. |
80 | 100 | runWithBlock(() -> Utilidades.printWithDelay("\r⚠️ Error durante la inspección de la colmena " + colmena.id + ".\n", 50)); |
81 | 101 | } |
82 | 102 | }); |
83 | 103 |
|
| 104 | + // Añadimos el hilo a la lista y lo iniciamos. |
84 | 105 | hilos.add(hilo); |
85 | 106 | hilo.start(); |
86 | 107 | } |
87 | 108 |
|
| 109 | + // Esperamos a que todos los hilos terminen antes de continuar. |
88 | 110 | for (Thread hilo : hilos) { |
89 | 111 | try { |
90 | 112 | hilo.join(); |
91 | 113 | } catch (InterruptedException e) { |
| 114 | + // En caso de error al esperar la finalización de un hilo, mostramos un mensaje. |
92 | 115 | runWithBlock(() -> Utilidades.printWithDelay("\r⚠️ Error esperando la finalización de un hilo.\n", 50)); |
93 | 116 | } |
94 | 117 | } |
95 | 118 |
|
| 119 | + // Después de que todas las inspecciones han terminado, mostramos los resultados. |
96 | 120 | runWithBlock(() -> { |
97 | 121 | mensajesResultado.forEach(mensaje -> Utilidades.printWithDelay(mensaje, 50)); |
98 | | - animacionAbejas(); |
| 122 | + animacionAbejas(); // Animación de abejas al finalizar las inspecciones. |
99 | 123 | }); |
100 | 124 | } |
101 | 125 | } |
0 commit comments