· 4 years ago · Aug 11, 2021, 12:38 AM
1package modelo;
2
3/**
4 *
5 *
6 */
7public class EstudianteDTO {
8
9 private final EstudianteDAO estudianteDAO;
10
11 public EstudianteDTO() {
12 //Envia la sentencia SQL para creación de tabla estudiantes
13 this.estudianteDAO = new EstudianteDAO(Sentencias.CREAR_DB);
14 }
15
16 /**
17 * Formatea una sentencia SQL con la información contenida en un objeto de
18 * tipo {@link Estudiante} para adicionar una fila a la tabla estudiantes
19 *
20 * @param estudiante objeto de tipo {@link Estudiante}
21 * @return cadena con el estado de la adición
22 */
23 public String agregarEstudiante(Estudiante estudiante) {
24 String sentenciaAgregarEstudiante = String.format(Sentencias.AGREGAR_ESTUDIANTE,
25 estudiante.getNombres(),
26 estudiante.getApellidos(),
27 estudiante.getFecha_nacimiento(),
28 estudiante.getCorreo_institucional(),
29 estudiante.getCorreo_personal(),
30 estudiante.getNum_celular(),
31 estudiante.getNum_fijo(),
32 estudiante.getPrograma_academico());
33 return this.estudianteDAO.agregarEstudiante(sentenciaAgregarEstudiante);
34 }
35
36 /**
37 * Formatea una sentencia SQL con la información contenida en un objeto de
38 * tipo {@link Estudiante} para actualizar una fila en la tabla estudiantes
39 *
40 * @param estudiante objeto de tipo {@link Estudiante}
41 * @return cadena con el estado de la actualización
42 */
43 public String actualizarEstudiante(Estudiante estudiante) {
44 String sentenciaActualizarEstudiante = String.format(Sentencias.ACTUALIZAR_ESTUDIANTE,
45 estudiante.getCorreo_personal(),
46 String.valueOf(estudiante.getNum_celular()),
47 String.valueOf(estudiante.getNum_fijo()),
48 estudiante.getPrograma_academico(),
49 estudiante.getId_estudiante());
50 return this.estudianteDAO.actualizarEstudiante(sentenciaActualizarEstudiante);
51 }
52
53 /**
54 * Formatea una sentencia SQL con el correo instiucional para eliminar una
55 * fila en la tabla estudiantes
56 *
57 * @param correo_institucional del estudiante a eliminar
58 * @return cadena con el estado de la eliminación
59 */
60 public String eliminarEstudiante(String correo_institucional) {
61 String sentenciaEliminarEstudiante = String.format(Sentencias.ELIMINAR_ESTUDIANTE, correo_institucional);
62 return this.estudianteDAO.eliminarEstudiante(sentenciaEliminarEstudiante);
63 }
64
65 /**
66 * Transfiere una sentencia SQL para obtener la información de todas las
67 * filas de la tabla estudiantes
68 *
69 * @return cadena con todas las filas de la tabla estudiantes concatenadas
70 * en ella
71 */
72 public String directorioEstudiantes() {
73 return this.estudianteDAO.mostrarEstudiantes(Sentencias.LISTAR_ESTUDIANTES);
74 }
75
76 /**
77 * Formatea una sentencia SQL con el correo institucional para obtener
78 * información de una fila de la tabla estudiantes
79 *
80 * @param correo_institucional del estudiante a obtener
81 * @return objeto de tipo {@link Estudiante}
82 */
83 public Estudiante obtenerEstudiante(String correo_institucional) {
84 String sentenciaObtenerEstudiante = String.format(Sentencias.BUSCAR_ESTUDIANTE_CORREO, correo_institucional);
85 return this.estudianteDAO.obtenerEstudiante(sentenciaObtenerEstudiante);
86 }
87
88 /**
89 * Formatea una sentencia SQL con el correo institucional para obtener
90 * información de una fila de la tabla estudiantes
91 *
92 * @param correo_institucional del estudiante a obtener
93 * @return un {@link Estudiante} en formato {@link String}
94 */
95 public String obtenerPorCorreo(String correo_institucional) {
96 String sentenciaObtenerEstudiante = String.format(Sentencias.BUSCAR_ESTUDIANTE_CORREO, correo_institucional);
97 return this.estudianteDAO.consultasEstudiantes(sentenciaObtenerEstudiante, 1);
98 }
99
100 /**
101 * Formatea una sentencia SQL con los apelidos para obtener informacion de
102 * un conjunto de filas de la tabla estudiantes que posean el mismo valor
103 * para apellidos
104 *
105 * @param apellidos del/los estudiante(s) a obtener
106 * @return cadena con todos los estudiantes que compartan {@code apellidos},
107 * concatenados en ella
108 */
109 public String obtenerPorApellidos(String apellidos) {
110 String sentenciaObtenerEstudiantes = String.format(Sentencias.BUSCAR_ESTUDIANTE_APELLIDOS, apellidos);
111 return this.estudianteDAO.consultasEstudiantes(sentenciaObtenerEstudiantes, 2);
112 }
113
114 /**
115 * Formatea una sentencia SQL con el programa para obtener información de un
116 * conjunto de filas de la tabla estudiantes que posean el mismo valor para
117 * 'programa_academico'
118 *
119 * @param programa de los estudiantes a mostrar
120 * @return cadena con todos los estudiantes que compartan
121 * {@code programa_academico}, concatenados en ella
122 */
123 public String obtenerPorPrograma(String programa) {
124 String sentenciaObtenerEstudiantes = String.format(Sentencias.BUSCAR_ESTUDIANTE_PROGRAMA, programa);
125 return this.estudianteDAO.consultasEstudiantes(sentenciaObtenerEstudiantes, 3);
126 }
127
128 /**
129 * Formatea una sentencia SQL con el programa para obtener el conteo de las
130 * filas de la tabla estudiantes que posean el mismo valor para
131 * 'programa_academico'
132 *
133 * @param programa de los estudiantes a mostrar
134 * @return número de filas retornado por la sentencia contar para el campo
135 * 'programa_academico'
136 */
137 public int contarEstudiantesPorPrograma(String programa) {
138 String sentenciaContarEstudiantes = String.format(Sentencias.CONTAR_ESTUDIANTES_PROGRAMA, programa);
139 return this.estudianteDAO.contarEstudiantes(sentenciaContarEstudiantes);
140 }
141
142 /**
143 * Formatea una sentencia SQL con la fecha de nacimiento para obtener
144 * información de un conjunto de filas de la tabla estudiantes que posean el
145 * mismo valor para 'fecha_nacimiento'
146 *
147 * @param fechaNacimiento de los estudiantes a mostrar
148 * @return cadena con todos los estudiantes que compartan
149 * {@code fecha_nacimiento}, concatenados en ella
150 */
151 public String obtenerPorFechaNacimiento(String fechaNacimiento) {
152 String sentenciaObtenerEstudiantes = String.format(Sentencias.BUSCAR_ESTUDIANTE_FECHANACIMIENTO, fechaNacimiento);
153 return this.estudianteDAO.consultasEstudiantes(sentenciaObtenerEstudiantes, 4);
154 }
155
156 /**
157 * Formatea una sentencia SQL con la fecha de nacimiento para obtener
158 * información de un conjunto de filas de la tabla estudiantes que posean el
159 * mismo valor para 'fecha_nacimiento'
160 *
161 * @param numeroCelular
162 * @return
163 */
164 public String obtenerPorNumeroCelular(String numeroCelular) {
165 String sentenciaObtenerEstudiantes = String.format(Sentencias.BUSCAR_ESTUDIANTE_NUMCELULAR, numeroCelular);
166 return this.estudianteDAO.consultasEstudiantes(sentenciaObtenerEstudiantes, 5);
167 }
168
169 /**
170 * Formatea una sentencia SQL para obtener el conteo de las filas de la
171 * tabla estudiantes
172 *
173 * @return True si hay filas en la tabla
174 */
175 public boolean hayEstudiantes() {
176 return this.estudianteDAO.contarEstudiantes(Sentencias.CONTAR_ESTUDIANTES) != 0;
177 }
178}
179
180/**
181 * Clase con la definición de sentencias SQL en cadenas de tipo {@link String}
182 *
183 *
184 */
185class Sentencias {
186
187 /**
188 * Sentencia para la creación de tabla estudiantes si está no existe
189 */
190 protected final static String CREAR_DB = "CREATE TABLE IF NOT EXISTS \"estudiantes\" (\n"
191 + " \"id_estudiante\" INTEGER NOT NULL UNIQUE,\n"
192 + " \"nombres\" TEXT NOT NULL,\n"
193 + " \"apellidos\" TEXT NOT NULL,\n"
194 + " \"fecha_nacimiento\" TEXT NOT NULL,\n"
195 + " \"correo_institucional\" TEXT NOT NULL UNIQUE,\n"
196 + " \"correo_personal\" TEXT NOT NULL,\n"
197 + " \"num_celular\" TEXT NOT NULL,\n"
198 + " \"num_fijo\" TEXT NOT NULL,\n"
199 + " \"programa_academico\" TEXT NOT NULL,\n"
200 + " PRIMARY KEY(\"id_estudiante\")\n"
201 + ");";
202
203 /**
204 * Sentencia para el retorno de una fila de la tabla estudiante dado el
205 * correo institucional<br>
206 * Requiere:<br>
207 * <ol>
208 * <li>correo_institucional: {@link String}</li>
209 * </ol>
210 */
211 protected final static String BUSCAR_ESTUDIANTE_CORREO = "SELECT * FROM estudiantes WHERE correo_institucional = '%s'";
212
213 /**
214 * Sentencia para el retorno de un conjunto de filas de la tabla estudiantes
215 * dados el/los apellido(s) <br>
216 * Requiere:<br>
217 * <ol>
218 * <li>apellidos: {@link String}</li>
219 * </ol>
220 */
221 protected final static String BUSCAR_ESTUDIANTE_APELLIDOS = "SELECT * FROM estudiantes WHERE apellidos = '%s'";
222
223 /**
224 * Sentencia para el retorno de un conjunto de filas de la tabla estudiantes
225 * dado el programa academico<br>
226 * Requiere:<br>
227 * <ol>
228 * <li>programa_academico: {@link String}</li>
229 * </ol>
230 */
231 protected final static String BUSCAR_ESTUDIANTE_PROGRAMA = "SELECT * FROM estudiantes WHERE programa_academico = '%s'";
232
233 /**
234 * Sentencia para el retorno de un conjunto de filas de la tabla estudiantes
235 * dada la fecha de nacimiento<br>
236 * Requiere:<br>
237 * <ol>
238 * <li>fecha_nacimiento: {@link String}</li>
239 * </ol>
240 */
241 protected final static String BUSCAR_ESTUDIANTE_FECHANACIMIENTO = "SELECT * FROM estudiantes WHERE fecha_nacimiento = '%s'";
242
243 /**
244 * Sentencia para el retorno de un conjunto de filas de la tabla estudiantes
245 * dado el número de celular <br>
246 * Requiere:<br>
247 * <ol>
248 * <li>num_celular: {@link String}</li>
249 * </ol>
250 */
251 protected final static String BUSCAR_ESTUDIANTE_NUMCELULAR = "SELECT * FROM estudiantes WHERE num_celular = '%s'";
252
253 /**
254 * Sentencia para adición de una fila a la tabla estudiante <br>
255 * Requiere:<br>
256 * <ol>
257 * <li>nombres: {@link String}</li>
258 * <li>apellidos: {@link String}</li>
259 * <li>fecha_nacimiento: {@link String}</li>
260 * <li>correo_institucional: {@link String}</li>
261 * <li>correo_personal: {@link String}</li>
262 * <li>num_celular: {@link String}</li>
263 * <li>num_fijo: {@link String}</li>
264 * <li>programa_academico: {@link String}</li>
265 * </ol>
266 */
267 protected final static String AGREGAR_ESTUDIANTE = "INSERT INTO estudiantes "
268 + "(id_estudiante, nombres, apellidos, fecha_nacimiento, "
269 + "correo_institucional, correo_personal, num_celular, num_fijo, programa_academico) "
270 + "VALUES (NULL, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')";
271
272 /**
273 * Sentencia para la actualización de una fila en la tabla estudiantes <br>
274 * Requiere:<br>
275 * <ol>
276 * <li>correo_personal: {@link String}</li>
277 * <li>num_celular: {@link String}</li>
278 * <li>num_fijo: {@link String}</li>
279 * <li>programa_academico: {@link String}</li>
280 * <li>id_estudiante: {@link Integer}</li>
281 * </ol>
282 */
283 protected final static String ACTUALIZAR_ESTUDIANTE = "UPDATE estudiantes SET "
284 + "correo_personal = '%s', num_celular = '%s', num_fijo = '%s', programa_academico = '%s' "
285 + "WHERE id_estudiante = '%d'";
286
287 /**
288 * Sentencia para eliminar una fila de la tabla estudiantes dado el correo
289 * institucional <br>
290 * Requiere:<br>
291 * <ol>
292 * <li>correo_institucional: {@link String}</li>
293 * </ol>
294 */
295 protected final static String ELIMINAR_ESTUDIANTE = "DELETE FROM estudiantes WHERE correo_institucional = '%s'";
296
297 /**
298 * Sentencia para el retorno de todas las filas de la tabla estudiante
299 */
300 protected final static String LISTAR_ESTUDIANTES = "SELECT * FROM estudiantes";
301
302 /**
303 * Sentencia para el retorno del conteo de todas las filas de la tabla
304 * estudiante
305 */
306 protected final static String CONTAR_ESTUDIANTES = "SELECT count(*) FROM estudiantes";
307
308 /**
309 * Sentencia para el retorno del conteo de todas las filas de la tabla
310 * estudiante dado el programa academico
311 */
312 protected final static String CONTAR_ESTUDIANTES_PROGRAMA = "SELECT count(*) FROM estudiantes WHERE programa_academico = '%s'";
313
314}
315