commit 47eb85f237c71a68128bbd35028336380fe32a2b Author: Isidoro Nevares Martín Date: Thu Oct 9 13:29:23 2025 +0200 PRIMER commit 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..58616d4 --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + aadd_act1_5.1 + + + + + + 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..746f0e4 --- /dev/null +++ b/src/es/palomafp/aadd/inm/GestorFormacion.java @@ -0,0 +1,70 @@ +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]; // L: Listar, C: Consultar, I: Insertar, B: Borrar, M: Modificar + 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); + break; + } + case "M": { + FamiliaProfesional familiaProfesional =new FamiliaProfesional(); + familiaProfesional.setCodigo(codigoFamilia); + familiaProfesional.setNombre(nombreFamilia); + iFamiliaProfesionalDAO.actualizarFamiliaProfesional(familiaProfesional); + break; + } + } + + } +} 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..e1140a8 --- /dev/null +++ b/src/es/palomafp/aadd/inm/dao/impl/FamiliaProfesionalDaoCSV.java @@ -0,0 +1,196 @@ +package es.palomafp.aadd.inm.dao.impl; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; +import java.nio.file.StandardOpenOption; +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 Path pathFichero = Paths.get(RUTA_FICHERO_FAMILIAS_PROFESIONALES); + private Path pathFicheroTMP = Paths.get(RUTA_FICHERO_TMP_FAMILIAS_PROFESIONALES); + + @Override + public FamiliaProfesional obtenerFamiliaProfesional(String codigoFamilia) { + FamiliaProfesional familiaProfesional = null; + + List lineas; + try { + lineas = Files.readAllLines(pathFichero, StandardCharsets.UTF_8); + List lineasSinCabecera = lineas.subList(1, lineas.size()); + + for (String linea : lineasSinCabecera) { + // 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 (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; + + List lineas; + try { + lineas = Files.readAllLines(pathFichero, StandardCharsets.UTF_8); + List lineasSinCabecera = lineas.subList(1, lineas.size()); + if (!lineasSinCabecera.isEmpty()) { + listaFamilias = new ArrayList<>(); + for (String linea : lineasSinCabecera) { + // 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); +// System.out.println("familiaProfesional: " + familiaProfesional); + + + listaFamilias.add(familiaProfesional); + } + } + } catch (IOException e) { + System.err.println("Error al leer el fichero: " + RUTA_FICHERO_FAMILIAS_PROFESIONALES); + e.printStackTrace(); + } + + return listaFamilias; + } + + /** + * Inserta una nueva familia profesional en el fichero CSV. + * + * @param familiaProfesional Familia profesional a insertar. + */ + public void insertarFamiliaProfesional(FamiliaProfesional familiaProfesional) { + String nuevaFamilia = String.format("%s|%s\n", familiaProfesional.getCodigo(), familiaProfesional.getNombre()); + + try { + Files.writeString(pathFichero, nuevaFamilia, StandardOpenOption.CREATE, StandardOpenOption.APPEND); + } catch (IOException e) { + System.err.println("Error al leer el fichero: " + RUTA_FICHERO_FAMILIAS_PROFESIONALES); + e.printStackTrace(); + } + } + + /** + * Elimina una familia profesional del fichero CSV. + * + * @param codigoFamilia Código de la familia profesional a eliminar. + */ + public void eliminarFamiliaProfesional(String codigoFamilia) { + List listaFamilias = obtenerListaFamiliasProfesionales(); + + if (listaFamilias != null) { + listaFamilias.removeIf(familiaProfesional -> familiaProfesional.getCodigo().equals(codigoFamilia)); + + insertarFamiliasProfesionalesFichero(listaFamilias); + } + } + + /** + * Actualiza el nombre de una familia profesional. + * + * @param familiaProfesional Familia profesional con el código y el nuevo + * nombre. + */ + 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); + } + + /** + * Inserta la lista de familias profesionales en el fichero CSV. Para ello + * primero crea un fichero temporal y luego renombra el fichero temporal al + * original. + * + * @param listaFamilias Lista de familias profesionales a insertar. + */ + private void insertarFamiliasProfesionalesFichero(List listaFamilias) { + + try { + String cabecera = String.format("codigo_familia|nombre_familia\n"); + + Files.writeString(pathFicheroTMP, cabecera, StandardOpenOption.CREATE, StandardOpenOption.APPEND); + + for (FamiliaProfesional familiaProfesional : listaFamilias) { + String nuevaFamilia = String.format("%s|%s\n", familiaProfesional.getCodigo(), + familiaProfesional.getNombre()); + + Files.writeString(pathFicheroTMP, nuevaFamilia, StandardOpenOption.APPEND); + + } + // Se elimina el fichero original y se renombra el temporal + } catch (IOException e) { + System.err.println("Error al leer el fichero: " + RUTA_FICHERO_TMP_FAMILIAS_PROFESIONALES); + e.printStackTrace(); + } + + // Se elimina el fichero original y se renombra el temporal + organizarFicheros(); + } + + private void organizarFicheros() { + try { + // Borrado del fichero original + Files.deleteIfExists(pathFichero); + + // Renombrado del fichero temporal + Files.move(pathFicheroTMP, pathFichero, StandardCopyOption.REPLACE_EXISTING); + } catch (IOException e) { + System.err.println("Error al renombrar el fichero: " + RUTA_FICHERO_TMP_FAMILIAS_PROFESIONALES); + e.printStackTrace(); + } + + } + +} 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 + "]"; + } + +}