From aa6458c39e603b7ba668933a94e4d4018b8c8169 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isidoro=20Nevares=20Mart=C3=ADn?= Date: Fri, 3 Oct 2025 12:44:24 +0200 Subject: [PATCH] primer commit --- .classpath | 10 ++ .gitignore | 2 + .project | 17 ++ .settings/org.eclipse.core.resources.prefs | 2 + .settings/org.eclipse.jdt.core.prefs | 11 ++ src/es/palomafp/aadd/inm/GestorFormacion.java | 69 ++++++++ src/es/palomafp/aadd/inm/dao/ICicloDAO.java | 22 +++ .../aadd/inm/dao/IFamiliaProfesionalDAO.java | 24 +++ src/es/palomafp/aadd/inm/dao/IGradoDAO.java | 17 ++ .../palomafp/aadd/inm/dao/impl/CicloDao.java | 32 ++++ .../dao/impl/FamiliaProfesionalDaoCSV.java | 166 ++++++++++++++++++ .../palomafp/aadd/inm/dao/impl/GradoDao.java | 24 +++ src/es/palomafp/aadd/inm/vo/Ciclo.java | 66 +++++++ .../aadd/inm/vo/FamiliaProfesional.java | 34 ++++ src/es/palomafp/aadd/inm/vo/Grado.java | 38 ++++ 15 files changed, 534 insertions(+) create mode 100644 .classpath create mode 100644 .gitignore create mode 100644 .project create mode 100644 .settings/org.eclipse.core.resources.prefs create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 src/es/palomafp/aadd/inm/GestorFormacion.java create mode 100644 src/es/palomafp/aadd/inm/dao/ICicloDAO.java create mode 100644 src/es/palomafp/aadd/inm/dao/IFamiliaProfesionalDAO.java create mode 100644 src/es/palomafp/aadd/inm/dao/IGradoDAO.java create mode 100644 src/es/palomafp/aadd/inm/dao/impl/CicloDao.java create mode 100644 src/es/palomafp/aadd/inm/dao/impl/FamiliaProfesionalDaoCSV.java create mode 100644 src/es/palomafp/aadd/inm/dao/impl/GradoDao.java create mode 100644 src/es/palomafp/aadd/inm/vo/Ciclo.java create mode 100644 src/es/palomafp/aadd/inm/vo/FamiliaProfesional.java create mode 100644 src/es/palomafp/aadd/inm/vo/Grado.java diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..f00af9b --- /dev/null +++ b/.classpath @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e618407 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/bin/ +*.class \ No newline at end of file diff --git a/.project b/.project new file mode 100644 index 0000000..e5f988a --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + aadd_act1_5 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..99f26c0 --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..84a76af --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=24 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=24 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=24 diff --git a/src/es/palomafp/aadd/inm/GestorFormacion.java b/src/es/palomafp/aadd/inm/GestorFormacion.java new file mode 100644 index 0000000..6ff0809 --- /dev/null +++ b/src/es/palomafp/aadd/inm/GestorFormacion.java @@ -0,0 +1,69 @@ +package es.palomafp.aadd.inm; + +import java.util.List; + +import es.palomafp.aadd.inm.dao.IFamiliaProfesionalDAO; +import es.palomafp.aadd.inm.dao.impl.FamiliaProfesionalDaoCSV; +import es.palomafp.aadd.inm.vo.FamiliaProfesional; + +/** + * + * GestorFormacion: Clase que se encarga de gestionar Formación (Familias, + * Grados y Ciclos) + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 2 oct 2025 + */ +public class GestorFormacion { + public static void main(String[] args) { +// String operacion= args[0]; + String operacion = "B"; + String codigoFamilia = args[1]; + String nombreFamilia = args[2]; + + // Se declaran las variables como Interfaces y se construyen como + // implementaciones. + IFamiliaProfesionalDAO iFamiliaProfesionalDAO = new FamiliaProfesionalDaoCSV(); + +// IGradoDAO iGradoDAO = new GradoDao(); +// ICicloDAO iCicloDAO = new CicloDao(); + + switch (operacion) { + case "L": + List listaFamilias = iFamiliaProfesionalDAO.obtenerListaFamiliasProfesionales(); + System.out.println(listaFamilias); + + break; + case "C": { + FamiliaProfesional familiaProfesional = iFamiliaProfesionalDAO.obtenerFamiliaProfesional(codigoFamilia); + System.out.println(familiaProfesional); + + break; + } + case "I": { + FamiliaProfesional familiaProfesional = iFamiliaProfesionalDAO.obtenerFamiliaProfesional(codigoFamilia); + // Si el código existe en el fichero se lanza mensaje + if (familiaProfesional != null) { + System.out.println("El código de familia profesional ya existe."); + } else { // Inserción + familiaProfesional = new FamiliaProfesional(); + familiaProfesional.setCodigo(codigoFamilia); + familiaProfesional.setNombre(nombreFamilia); + iFamiliaProfesionalDAO.insertarFamiliaProfesional(familiaProfesional); + } + + break; + } + case "B": { + iFamiliaProfesionalDAO.eliminarFamiliaProfesional(codigoFamilia); + } + case "M": { + FamiliaProfesional familiaProfesional =new FamiliaProfesional(); + familiaProfesional.setCodigo(codigoFamilia); + familiaProfesional.setNombre(nombreFamilia); + iFamiliaProfesionalDAO.actualizarFamiliaProfesional(familiaProfesional); + } + } + + } +} diff --git a/src/es/palomafp/aadd/inm/dao/ICicloDAO.java b/src/es/palomafp/aadd/inm/dao/ICicloDAO.java new file mode 100644 index 0000000..b0ddffb --- /dev/null +++ b/src/es/palomafp/aadd/inm/dao/ICicloDAO.java @@ -0,0 +1,22 @@ +package es.palomafp.aadd.inm.dao; + +import java.util.List; + +import es.palomafp.aadd.inm.vo.Ciclo; + +/** + * + * ICicloDAO: Interfaz que contiene las operaciones a realizar sobre un Ciclo + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 3 oct 2025 + * + * + */ + +public interface ICicloDAO { + Ciclo obtenerCiclo(String codigoCiclo); + List obtenerListaCiclosPorFamiliaGrado(String codigoFamilia, String codigoGrado); + +} + diff --git a/src/es/palomafp/aadd/inm/dao/IFamiliaProfesionalDAO.java b/src/es/palomafp/aadd/inm/dao/IFamiliaProfesionalDAO.java new file mode 100644 index 0000000..5b76e7a --- /dev/null +++ b/src/es/palomafp/aadd/inm/dao/IFamiliaProfesionalDAO.java @@ -0,0 +1,24 @@ +package es.palomafp.aadd.inm.dao; + +import java.util.List; + +import es.palomafp.aadd.inm.vo.FamiliaProfesional; + +/** + * + * IFamiliaProfesionalDAO: Interfaz que contiene las operaciones a realizar + * sobre una Familia Profesional. + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 3 oct 2025 + * + * + */ + +public interface IFamiliaProfesionalDAO { + FamiliaProfesional obtenerFamiliaProfesional(String codigoFamilia); + List obtenerListaFamiliasProfesionales(); + void insertarFamiliaProfesional(FamiliaProfesional familiaProfesional); + void eliminarFamiliaProfesional(String codigoFamiliia); + void actualizarFamiliaProfesional(FamiliaProfesional familiaProfesional); +} diff --git a/src/es/palomafp/aadd/inm/dao/IGradoDAO.java b/src/es/palomafp/aadd/inm/dao/IGradoDAO.java new file mode 100644 index 0000000..38124e9 --- /dev/null +++ b/src/es/palomafp/aadd/inm/dao/IGradoDAO.java @@ -0,0 +1,17 @@ +package es.palomafp.aadd.inm.dao; + +import es.palomafp.aadd.inm.vo.Grado; + +/** + * + * IGradoDAO: Interfaz que contiene las operaciones a realizar sobre un Grado. + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 3 oct 2025 + * + * + */ + +public interface IGradoDAO { + Grado obtenerGrado(String codigoGrado); +} diff --git a/src/es/palomafp/aadd/inm/dao/impl/CicloDao.java b/src/es/palomafp/aadd/inm/dao/impl/CicloDao.java new file mode 100644 index 0000000..d05527a --- /dev/null +++ b/src/es/palomafp/aadd/inm/dao/impl/CicloDao.java @@ -0,0 +1,32 @@ +package es.palomafp.aadd.inm.dao.impl; + +import java.util.List; + +import es.palomafp.aadd.inm.dao.ICicloDAO; +import es.palomafp.aadd.inm.vo.Ciclo; + +/** + * + * Ciclo: Clase que implementa las operaciones del interfaz ICicloDAO. + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 3 oct 2025 + * + * + */ + +public class CicloDao implements ICicloDAO { + + @Override + public Ciclo obtenerCiclo(String codigoCiclo) { + // TODO Auto-generated method stub + return null; + } + + @Override + public List obtenerListaCiclosPorFamiliaGrado(String codigoFamilia, String codigoGrado) { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/src/es/palomafp/aadd/inm/dao/impl/FamiliaProfesionalDaoCSV.java b/src/es/palomafp/aadd/inm/dao/impl/FamiliaProfesionalDaoCSV.java new file mode 100644 index 0000000..ce67ed2 --- /dev/null +++ b/src/es/palomafp/aadd/inm/dao/impl/FamiliaProfesionalDaoCSV.java @@ -0,0 +1,166 @@ +package es.palomafp.aadd.inm.dao.impl; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import es.palomafp.aadd.inm.dao.IFamiliaProfesionalDAO; +import es.palomafp.aadd.inm.vo.FamiliaProfesional; + +/** + * + * FamiliaProfesionalDao: Clase que implementa las operaciones del interfaz + * IFamiliaProfesionalDAO. + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 3 oct 2025 + * + * + */ + +public class FamiliaProfesionalDaoCSV implements IFamiliaProfesionalDAO { + private final static String RUTA_FICHERO_FAMILIAS_PROFESIONALES = "C:\\Users\\ineva\\aadd\\inm\\act15\\familia_profesional.csv"; + private final static String RUTA_FICHERO_TMP_FAMILIAS_PROFESIONALES = "C:\\Users\\ineva\\aadd\\inm\\act15\\familia_profesional_tmp.csv"; + private static final String DELIMITADOR = "\\|"; + + private File fichero = new File(RUTA_FICHERO_FAMILIAS_PROFESIONALES); + + @Override + public FamiliaProfesional obtenerFamiliaProfesional(String codigoFamilia) { + FamiliaProfesional familiaProfesional = null; + + try (BufferedReader bf = new BufferedReader(new FileReader(fichero))) { + String linea; + + bf.readLine(); // Salta la línea de cabecera. + while ((linea = bf.readLine()) != null) { + + // Procesar información de la Familia Profesional + String[] camposFamilia = linea.split(DELIMITADOR); + String codFamilia = camposFamilia[0].trim(); + String nombreFamilia = camposFamilia[1].trim(); + + if (codigoFamilia != null && codigoFamilia.equals(codFamilia)) { + familiaProfesional = new FamiliaProfesional(); + + familiaProfesional.setCodigo(codFamilia); + familiaProfesional.setNombre(nombreFamilia); + + break; + } + } + } catch ( + + FileNotFoundException e) { + System.err.println("Fichero no encontrado: " + RUTA_FICHERO_FAMILIAS_PROFESIONALES); + e.printStackTrace(); + } catch (IOException e) { + System.err.println("Error al leer el fichero: " + RUTA_FICHERO_FAMILIAS_PROFESIONALES); + e.printStackTrace(); + } + return familiaProfesional; + } + + @Override + public List obtenerListaFamiliasProfesionales() { + List listaFamilias = null; + + try (BufferedReader bf = new BufferedReader(new FileReader(fichero))) { + String linea; + listaFamilias = new ArrayList(); + + bf.readLine(); // Salta la línea de cabecera. + while ((linea = bf.readLine()) != null) { + + // Procesar información de la Familia Profesional + String[] camposFamilia = linea.split("\\|"); + String codFamilia = camposFamilia[0].trim(); + String nombreFamilia = camposFamilia[1].trim(); + + FamiliaProfesional familiaProfesional = new FamiliaProfesional(); + + familiaProfesional.setCodigo(codFamilia); + familiaProfesional.setNombre(nombreFamilia); + listaFamilias.add(familiaProfesional); + } + } catch ( + + FileNotFoundException e) { + System.err.println("Fichero no encontrado: " + RUTA_FICHERO_FAMILIAS_PROFESIONALES); + e.printStackTrace(); + } catch (IOException e) { + System.err.println("Error al leer el fichero: " + RUTA_FICHERO_FAMILIAS_PROFESIONALES); + e.printStackTrace(); + } + + return listaFamilias; + } + + @Override + public void insertarFamiliaProfesional(FamiliaProfesional familiaProfesional) { + String nuevaFamilia = String.format("%s|%s", familiaProfesional.getCodigo(), familiaProfesional.getNombre()); + + try (BufferedWriter writer = new BufferedWriter(new FileWriter(RUTA_FICHERO_FAMILIAS_PROFESIONALES, true))) { + writer.newLine(); // Añadir salto de línea antes + writer.write(nuevaFamilia); // Escribir la nueva fila + } catch (IOException e) { + System.err.println("Error al escribir en el archivo: " + e.getMessage()); + } + } + + @Override + public void eliminarFamiliaProfesional(String codigoFamilia) { + List listaFamilias = obtenerListaFamiliasProfesionales(); + + listaFamilias.removeIf(familiaProfesional -> familiaProfesional.getCodigo().equals(codigoFamilia)); + + insertarFamiliasProfesionalesFichero(listaFamilias); + + } + + @Override + public void actualizarFamiliaProfesional(FamiliaProfesional familiaProfesional) { + List listaFamilias = obtenerListaFamiliasProfesionales(); + + // Se cambia el valor del nombre de la familia. + for (FamiliaProfesional familiaProf : listaFamilias) { + if (familiaProf.getCodigo().equals(familiaProfesional.getCodigo())){ + familiaProf.setNombre(familiaProfesional.getNombre()); + } + } + + insertarFamiliasProfesionalesFichero(listaFamilias); + } + + private void insertarFamiliasProfesionalesFichero(List listaFamilias) { + File ficheroTMP= new File(RUTA_FICHERO_TMP_FAMILIAS_PROFESIONALES); + try (BufferedWriter writer = new BufferedWriter(new FileWriter(ficheroTMP))) { + writer.write("codigo_familia|nombre_familia"); // Escribir la nueva fil + for (FamiliaProfesional familiaProfesional : listaFamilias) { + String nuevaFamilia = String.format("%s|%s", familiaProfesional.getCodigo(), + familiaProfesional.getNombre()); + + writer.newLine(); // Añadir salto de línea antes + writer.write(nuevaFamilia); // Escribir la nueva fila + + } + // Se elimina el fichero original y se renombra el temporal + } catch (IOException e) { + System.err.println("Error al escribir en el archivo: " + e.getMessage()); + } + + fichero.delete(); + boolean renombrado = ficheroTMP.renameTo(fichero); + if (!renombrado) { + System.err.println("No se pudo renombrar el fichero temporal: " + ficheroTMP.getAbsolutePath()); + } + + } + +} diff --git a/src/es/palomafp/aadd/inm/dao/impl/GradoDao.java b/src/es/palomafp/aadd/inm/dao/impl/GradoDao.java new file mode 100644 index 0000000..082ddd9 --- /dev/null +++ b/src/es/palomafp/aadd/inm/dao/impl/GradoDao.java @@ -0,0 +1,24 @@ +package es.palomafp.aadd.inm.dao.impl; + +import es.palomafp.aadd.inm.dao.IGradoDAO; +import es.palomafp.aadd.inm.vo.Grado; + +/** + * + * GradoDao: Clase que implementa las operaciones del interfaz IGradoDAO. + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 3 oct 2025 + * + * + */ + +public class GradoDao implements IGradoDAO { + + @Override + public Grado obtenerGrado(String codigoGrado) { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/src/es/palomafp/aadd/inm/vo/Ciclo.java b/src/es/palomafp/aadd/inm/vo/Ciclo.java new file mode 100644 index 0000000..d3ee10f --- /dev/null +++ b/src/es/palomafp/aadd/inm/vo/Ciclo.java @@ -0,0 +1,66 @@ +package es.palomafp.aadd.inm.vo; + +/** + * + * Ciclo: Clase que representa el contenido de un Ciclo Formativo + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 3 oct 2025 + * + * + */ + +public class Ciclo { + private String codigo; + private String descripcion; + private int numeroHoras; + private FamiliaProfesional familia; + private Grado grado; + + public String getCodigo() { + return codigo; + } + + public void setCodigo(String codigo) { + this.codigo = codigo; + } + + public String getDescripcion() { + return descripcion; + } + + public void setDescripcion(String descripcion) { + this.descripcion = descripcion; + } + + public int getNumeroHoras() { + return numeroHoras; + } + + public void setNumeroHoras(int numeroHoras) { + this.numeroHoras = numeroHoras; + } + + public FamiliaProfesional getFamilia() { + return familia; + } + + public void setFamilia(FamiliaProfesional familia) { + this.familia = familia; + } + + public Grado getGrado() { + return grado; + } + + public void setGrado(Grado grado) { + this.grado = grado; + } + + @Override + public String toString() { + return "Ciclo [codigo=" + codigo + ", descripcion=" + descripcion + ", numeroHoras=" + numeroHoras + + ", familia=" + familia + ", grado=" + grado + "]"; + } + +} diff --git a/src/es/palomafp/aadd/inm/vo/FamiliaProfesional.java b/src/es/palomafp/aadd/inm/vo/FamiliaProfesional.java new file mode 100644 index 0000000..9d99344 --- /dev/null +++ b/src/es/palomafp/aadd/inm/vo/FamiliaProfesional.java @@ -0,0 +1,34 @@ +package es.palomafp.aadd.inm.vo; + +/** + * + * FamiliaProfesional: Clase que representa el contenido de una Familia Profesional + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 3 oct 2025 + * + * + */ + +public class FamiliaProfesional { + private String codigo; + private String nombre; + public String getCodigo() { + return codigo; + } + public void setCodigo(String codigo) { + this.codigo = codigo; + } + public String getNombre() { + return nombre; + } + public void setNombre(String nombre) { + this.nombre = nombre; + } + @Override + public String toString() { + return "FamiliaProfesional [codigo=" + codigo + ", nombre=" + nombre + "]\n"; + } + +} + diff --git a/src/es/palomafp/aadd/inm/vo/Grado.java b/src/es/palomafp/aadd/inm/vo/Grado.java new file mode 100644 index 0000000..fc11c52 --- /dev/null +++ b/src/es/palomafp/aadd/inm/vo/Grado.java @@ -0,0 +1,38 @@ +package es.palomafp.aadd.inm.vo; + +/** + * + * Grado: Clase que representa el contenido de un Grado + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 2 oct 2025 + */ +public class Grado { + private String codigo; + private String nombre; + private String categoria; + + public String getCodigo() { + return codigo; + } + public void setCodigo(String codigo) { + this.codigo = codigo; + } + public String getNombre() { + return nombre; + } + public void setNombre(String nombre) { + this.nombre = nombre; + } + public String getCategoria() { + return categoria; + } + public void setCategoria(String categoria) { + this.categoria = categoria; + } + @Override + public String toString() { + return "Grado [codigo=" + codigo + ", nombre=" + nombre + ", categoria=" + categoria + "]"; + } + +}