Este programa permite leer, procesar y almacenar datos provenientes de sensores agrícolas, proporcionando opciones de exportación para bases de datos SQL, NoSQL o en formato JSON.
-
Clonar el repositorio:
git clone <URL-del-repositorio>
-
Configurar el entorno de ejecución:
- Requiere Java 17 o superior
- Dependencias adicionales indicadas en
build.gradle.
-
Configurar el archivo
config.propertiesen el directorioresourcespara especificar directorios de entrada y salida (ver ejemplo más abajo).
- Ejecutar el programa:
java -jar agriculture-data-processor.jar
- Flujo de trabajo:
- Cargar archivo de texto con datos del sensor.
- Confirmar carga exitosa de los datos.
- Ingresar información adicional del cultivo (tipo de cultivo, temperatura de agua, volumen de riego).
- Seleccionar el formato de exportación: SQL, NoSQL o JSON.
- Confirmar la exportación o continuar usando el programa.
- Main.java: Punto de entrada principal del programa.
- controllers/DataProcessorController: Controla la lógica de lectura, validación y exportación de datos.
- models/CropData: Representa los datos de cultivo y riego.
- services/FileService: Administra la lectura de archivos de texto y validación de datos.
- services/ConfirmationService: Gestiona los mensajes de confirmación para el usuario.
- services/ExportService: Exporta los datos en SQL, NoSQL o JSON.
- utils/LoggerUtil: Define configuraciones de logging y otros registros.
- views/UserInterface: Interfaz para la interacción con el usuario.
La configuración de logs permite definir el nivel de registro en el archivo config.properties. Cambie log.level a DEBUG para ver mensajes detallados durante la ejecución.
Ejemplo de archivo config.properties:
# Configuración de la aplicación
input.file.path=./data/sensors_data.txt
output.directory.path=./output
log.level=INFO- Agregar formatos de salida: El
ExportServicepuede extenderse para incluir otros formatos de archivo. - Pruebas Unitarias: Asegurarse de que cada módulo está cubierto por pruebas unitarias.
Lectura del archivo de texto:
public class FileService {
public List<String> readFile(String filePath) throws IOException {
List<String> dataLines = Files.readAllLines(Paths.get(filePath));
if (dataLines.isEmpty()) {
throw new IOException("El archivo está vacío o no contiene datos válidos.");
}
return dataLines;
}
}Confirmación de Acción:
public class ConfirmationService {
public void confirmReadSuccess() {
System.out.println("Datos cargados exitosamente.");
}
public void confirmReadError() {
System.out.println("Error al cargar el archivo. Por favor, intente nuevamente.");
}
}Exportar a JSON:
public class ExportService {
public void exportToJSON(CropData data, String outputPath) throws IOException {
String jsonString = new Gson().toJson(data);
Files.write(Paths.get(outputPath), jsonString.getBytes());
}
}- FileService: Verifica que el archivo se lea correctamente y lanza una excepción si está vacío.
- ConfirmationService: Confirma que los mensajes se muestren correctamente.
- ExportService: Asegura que los datos exportados tengan el formato esperado.
- Modularidad: Cada clase debe cumplir con un único propósito para facilitar el mantenimiento.
- Gestión de errores: Manejar adecuadamente las excepciones, especialmente en las operaciones de E/S.
- Documentación: Incluir comentarios en el código y mantener el README actualizado.