Skip to content

Commit a0a0f5a

Browse files
authored
Merge pull request #9023 from AnaLauDB/reto-25-java
#25 - Java
2 parents 612e748 + fedd62b commit a0a0f5a

File tree

1 file changed

+252
-0
lines changed

1 file changed

+252
-0
lines changed
Lines changed: 252 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,252 @@
1+
import java.util.logging.*;
2+
import java.util.*;
3+
import java.io.IOException;
4+
5+
public class AnaLauDB {
6+
7+
// Logger para la clase
8+
private static final Logger logger = Logger.getLogger(AnaLauDB.class.getName());
9+
10+
// Clase para representar una tarea
11+
static class Tarea {
12+
private String nombre;
13+
private String descripcion;
14+
private Date fechaCreacion;
15+
16+
public Tarea(String nombre, String descripcion) {
17+
this.nombre = nombre;
18+
this.descripcion = descripcion;
19+
this.fechaCreacion = new Date();
20+
}
21+
22+
// Getters
23+
public String getNombre() {
24+
return nombre;
25+
}
26+
27+
public String getDescripcion() {
28+
return descripcion;
29+
}
30+
31+
public Date getFechaCreacion() {
32+
return fechaCreacion;
33+
}
34+
35+
@Override
36+
public String toString() {
37+
return String.format("Tarea{nombre='%s', descripcion='%s', fecha=%s}",
38+
nombre, descripcion, fechaCreacion);
39+
}
40+
}
41+
42+
// Gestor de tareas
43+
static class GestorTareas {
44+
private List<Tarea> tareas;
45+
private Logger logger;
46+
47+
public GestorTareas() {
48+
this.tareas = new ArrayList<>();
49+
this.logger = Logger.getLogger(GestorTareas.class.getName());
50+
configurarLogger();
51+
}
52+
53+
private void configurarLogger() {
54+
try {
55+
// Crear handler para archivo
56+
FileHandler fileHandler = new FileHandler("tareas.log", true);
57+
fileHandler.setFormatter(new SimpleFormatter());
58+
logger.addHandler(fileHandler);
59+
60+
// Handler para consola
61+
ConsoleHandler consoleHandler = new ConsoleHandler();
62+
consoleHandler.setFormatter(new SimpleFormatter());
63+
logger.addHandler(consoleHandler);
64+
65+
logger.setLevel(Level.ALL);
66+
67+
} catch (IOException e) {
68+
System.err.println("Error configurando logger: " + e.getMessage());
69+
}
70+
}
71+
72+
public void añadirTarea(String nombre, String descripcion) {
73+
long inicio = System.currentTimeMillis();
74+
75+
logger.info("Iniciando proceso de añadir tarea: " + nombre);
76+
77+
// Validaciones
78+
if (nombre == null || nombre.trim().isEmpty()) {
79+
logger.warning("Intento de añadir tarea con nombre vacío");
80+
throw new IllegalArgumentException("El nombre no puede estar vacío");
81+
}
82+
83+
// Verificar si ya existe
84+
for (Tarea t : tareas) {
85+
if (t.getNombre().equals(nombre)) {
86+
logger.warning("Intento de añadir tarea duplicada: " + nombre);
87+
throw new IllegalArgumentException("La tarea ya existe");
88+
}
89+
}
90+
91+
// Simular procesamiento
92+
try {
93+
Thread.sleep(100); // Simular trabajo
94+
} catch (InterruptedException e) {
95+
logger.severe("Proceso interrumpido al añadir tarea: " + e.getMessage());
96+
return;
97+
}
98+
99+
Tarea nuevaTarea = new Tarea(nombre, descripcion);
100+
tareas.add(nuevaTarea);
101+
102+
long fin = System.currentTimeMillis();
103+
logger.info(String.format("Tarea '%s' añadida exitosamente en %d ms",
104+
nombre, (fin - inicio)));
105+
logger.fine("Detalles de la tarea: " + nuevaTarea);
106+
}
107+
108+
public boolean eliminarTarea(String nombre) {
109+
long inicio = System.currentTimeMillis();
110+
111+
logger.info("Iniciando proceso de eliminar tarea: " + nombre);
112+
113+
if (nombre == null || nombre.trim().isEmpty()) {
114+
logger.warning("Intento de eliminar tarea con nombre vacío");
115+
return false;
116+
}
117+
118+
Iterator<Tarea> iterator = tareas.iterator();
119+
while (iterator.hasNext()) {
120+
Tarea tarea = iterator.next();
121+
if (tarea.getNombre().equals(nombre)) {
122+
iterator.remove();
123+
long fin = System.currentTimeMillis();
124+
logger.info(String.format("Tarea '%s' eliminada exitosamente en %d ms",
125+
nombre, (fin - inicio)));
126+
logger.fine("Tarea eliminada: " + tarea);
127+
return true;
128+
}
129+
}
130+
131+
long fin = System.currentTimeMillis();
132+
logger.warning(String.format("Tarea '%s' no encontrada para eliminar (tiempo: %d ms)",
133+
nombre, (fin - inicio)));
134+
return false;
135+
}
136+
137+
public void listarTareas() {
138+
long inicio = System.currentTimeMillis();
139+
140+
logger.info("Iniciando listado de tareas");
141+
logger.finer("Número total de tareas: " + tareas.size());
142+
143+
if (tareas.isEmpty()) {
144+
logger.info("No hay tareas para mostrar");
145+
System.out.println("No hay tareas registradas.");
146+
return;
147+
}
148+
149+
System.out.println("=== Lista de Tareas ===");
150+
for (int i = 0; i < tareas.size(); i++) {
151+
Tarea tarea = tareas.get(i);
152+
System.out.printf("%d. %s - %s%n",
153+
i + 1, tarea.getNombre(), tarea.getDescripcion());
154+
logger.finest("Mostrando tarea: " + tarea.getNombre());
155+
}
156+
157+
long fin = System.currentTimeMillis();
158+
logger.info(String.format("Listado completado en %d ms (%d tareas mostradas)",
159+
(fin - inicio), tareas.size()));
160+
}
161+
}
162+
163+
public static void ejemplosNivelesLog() {
164+
System.out.println("=== Ejemplos de niveles de logging ===");
165+
166+
// Configurar logger para mostrar todos los niveles
167+
logger.setLevel(Level.ALL);
168+
169+
// Crear handler para ver todos los mensajes
170+
ConsoleHandler handler = new ConsoleHandler();
171+
handler.setLevel(Level.ALL);
172+
handler.setFormatter(new SimpleFormatter());
173+
logger.addHandler(handler);
174+
175+
// Ejemplos de cada nivel
176+
logger.severe("SEVERE: Error crítico del sistema");
177+
logger.warning("WARNING: Situación que requiere atención");
178+
logger.info("INFO: Información general del proceso");
179+
logger.config("CONFIG: Información de configuración");
180+
logger.fine("FINE: Información detallada para debugging");
181+
logger.finer("FINER: Información más detallada para debugging");
182+
logger.finest("FINEST: Información muy detallada para debugging");
183+
}
184+
185+
public static void main(String[] args) {
186+
// Ejemplos básicos de logging
187+
ejemplosNivelesLog();
188+
189+
System.out.println("\n=== DIFICULTAD EXTRA: Gestor de Tareas ===");
190+
191+
GestorTareas gestor = new GestorTareas();
192+
Scanner scanner = new Scanner(System.in);
193+
194+
while (true) {
195+
System.out.println("\n--- Menú ---");
196+
System.out.println("1. Añadir tarea");
197+
System.out.println("2. Eliminar tarea");
198+
System.out.println("3. Listar tareas");
199+
System.out.println("4. Salir");
200+
System.out.print("Seleccione una opción: ");
201+
202+
try {
203+
int opcion = scanner.nextInt();
204+
scanner.nextLine(); // Consumir el salto de línea
205+
206+
switch (opcion) {
207+
case 1:
208+
System.out.print("Nombre de la tarea: ");
209+
String nombre = scanner.nextLine();
210+
System.out.print("Descripción: ");
211+
String descripcion = scanner.nextLine();
212+
try {
213+
gestor.añadirTarea(nombre, descripcion);
214+
System.out.println("Tarea añadida exitosamente.");
215+
} catch (Exception e) {
216+
System.out.println("Error: " + e.getMessage());
217+
}
218+
break;
219+
220+
case 2:
221+
System.out.print("Nombre de la tarea a eliminar: ");
222+
String nombreEliminar = scanner.nextLine();
223+
boolean eliminada = gestor.eliminarTarea(nombreEliminar);
224+
if (eliminada) {
225+
System.out.println("Tarea eliminada exitosamente.");
226+
} else {
227+
System.out.println("Tarea no encontrada.");
228+
}
229+
break;
230+
231+
case 3:
232+
gestor.listarTareas();
233+
break;
234+
235+
case 4:
236+
logger.info("Cerrando aplicación de gestión de tareas");
237+
System.out.println("¡Hasta luego!");
238+
scanner.close();
239+
return;
240+
241+
default:
242+
logger.warning("Opción inválida seleccionada: " + opcion);
243+
System.out.println("Opción inválida.");
244+
}
245+
} catch (Exception e) {
246+
logger.severe("Error inesperado en el menú principal: " + e.getMessage());
247+
System.out.println("Error: Entrada inválida.");
248+
scanner.nextLine(); // Limpiar buffer
249+
}
250+
}
251+
}
252+
}

0 commit comments

Comments
 (0)