private String getXMLBloqueHorario( AnoEscolar ano, int contador, int dia, TramoHorario tramo, Dependencia dependencia, Curso curso, Unidad unidad, Actividad actividad, Materia materia) { StringBuilder sb = new StringBuilder(); sb.append(String.format("\t\t<grupo_datos seq=\"ACTIVIDAD_%d\">\n", contador)); sb.append(String.format("\t\t\t<dato nombre_dato=\"N_DIASEMANA\">%d</dato>\n", dia)); sb.append(String.format("\t\t\t<dato nombre_dato=\"X_TRAMO\">%d</dato>\n", tramo.getCodigo())); if (dependencia != null && Num.getInt(dependencia.getCodigo()) > 0) { sb.append( String.format( "\t\t\t<dato nombre_dato=\"X_DEPENDENCIA\">%d</dato>\n", dependencia.getCodigo())); } else { sb.append("\t\t\t<dato nombre_dato=\"X_DEPENDENCIA\"/>\n"); } sb.append( String.format("\t\t\t<dato nombre_dato=\"X_UNIDAD\">%d</dato>\n", unidad.getCodigo())); sb.append( String.format("\t\t\t<dato nombre_dato=\"X_OFERTAMATRIG\">%d</dato>\n", curso.getCodigo())); if (materia == null) { sb.append("\t\t\t<dato nombre_dato=\"X_MATERIAOMG\"/>\n"); } else { sb.append( String.format( "\t\t\t<dato nombre_dato=\"X_MATERIAOMG\">%d</dato>\n", materia.getCodigo())); } sb.append( String.format("\t\t\t<dato nombre_dato=\"F_INICIO\">01/09/%d</dato>\n", ano.getAno())); sb.append( String.format("\t\t\t<dato nombre_dato=\"F_FIN\">31/08/%d</dato>\n", (ano.getAno() + 1))); sb.append(String.format("\t\t\t<dato nombre_dato=\"N_HORINI\">615</dato>\n", tramo.getHini())); sb.append(String.format("\t\t\t<dato nombre_dato=\"N_HORFIN\">675</dato>\n", tramo.getHfin())); sb.append( String.format( "\t\t\t<dato nombre_dato=\"X_ACTIVIDAD\">%d</dato>\n", actividad.getCodigo())); sb.append("\t\t</grupo_datos>\n"); return sb.toString(); }
// TODO Implementar el envío directo a Séneca public File exportarHorariosXMLSeneca() throws IOException { File ficheroXml = null; // Primero precargamos los profesores, unidades, etc firePropertyChange("message", null, "Precargando datos de profesores..."); Profesor.getProfesores(); firePropertyChange("message", null, "Precargando datos de unidades..."); Unidad.getUnidades(); firePropertyChange("message", null, "Precargando datos de dependencias..."); Dependencia.getDependencias(); firePropertyChange("message", null, "Precargando datos de tramos horarios..."); TramoHorario.getTramosHorarios(); firePropertyChange("message", null, "Precargando datos de materias..."); Materia.getMaterias(); firePropertyChange("message", null, "Precargando datos de actividades..."); Actividad.getActividades(); firePropertyChange("message", null, "Precargando datos de unidades..."); Unidad.getUnidades(); firePropertyChange("message", null, "Precargando datos de cursos..."); Curso.getCursos(); int contadorProfesores = 1; int contadorActividad = 1; // Ahora cargamos todos los horarios del año escolar PreparedStatement st = null; ResultSet res = null; try { firePropertyChange("message", null, "Procesando horarios..."); st = (PreparedStatement) MaimonidesApp.getConexion() .prepareStatement("SELECT * FROM horarios_ WHERE ano=? ORDER BY profesor_id "); st.setInt(1, MaimonidesApp.getApplication().getAnoEscolar().getId()); res = st.executeQuery(); int ultimoProfesor = -1; ArrayList<String> bloquesProfesores = new ArrayList<String>(); ArrayList<String> bloquesActividad = new ArrayList<String>(); while (res.next()) { try { int idProfesor = res.getInt("profesor_id"); int dia = res.getInt("dia"); int idMateria = res.getInt("materia_id"); int idActividad = res.getInt("actividad_id"); int idUnidad = res.getInt("unidad_id"); int idDependencia = res.getInt("aula_id"); Dependencia dependencia = null; if (idDependencia > 0) { try { dependencia = Dependencia.getDependencia(idDependencia); } catch (Exception ex) { Logger.getLogger(ExportadorHorariosSeneca.class.getName()) .log(Level.SEVERE, "No existe la dependencia " + idDependencia + ".", ex); } } TramoHorario tramo = TramoHorario.getTramoHorario(res.getInt("tramo_id")); Materia materia = null; Actividad actividad = Actividad.getActividad(idActividad); Unidad unidad = Unidad.getUnidad(idUnidad); Curso curso = Curso.getCurso(unidad.getIdCurso()); if (idMateria > 0) { materia = Materia.getMateria(idMateria); } if (idProfesor != ultimoProfesor) { // Si cambiamos de profesor tenemos que crear un nuevo registro // si el profesor anterior no era -1 if (ultimoProfesor != -1) { String bloqueProfesor = getBloqueProfesor(contadorProfesores, idProfesor, bloquesActividad); if (bloqueProfesor != null) { bloquesProfesores.add(bloqueProfesor); contadorProfesores++; } bloquesActividad.clear(); contadorActividad = 1; } } ultimoProfesor = idProfesor; // Añadimos el bloque de actividades bloquesActividad.add( getXMLBloqueHorario( MaimonidesApp.getApplication().getAnoEscolar(), contadorActividad, dia, tramo, dependencia, curso, unidad, actividad, materia)); contadorActividad++; } catch (Exception e) { Logger.getLogger(ExportadorHorariosSeneca.class.getName()) .log(Level.SEVERE, "Ha habido un error procesando el horario.", e); } } // Añadimos el último profesor if (ultimoProfesor != -1) { String bloqueProfesor = getBloqueProfesor(contadorProfesores, ultimoProfesor, bloquesActividad); if (bloqueProfesor != null) { bloquesProfesores.add(bloqueProfesor); } } // Ahora generamos el resto del documento GregorianCalendar fecha = new GregorianCalendar(); StringBuilder xml = new StringBuilder(); xml.append( String.format( "<SERVICIO modulo=\"HORARIOS\" tipo=\"I\" autor=\"Maimonides %s\" fecha=\"%2$tm/%2$td/%2$tY %tT\">\n", Mantenimiento.getAplicationVersion(), fecha, fecha)); xml.append("<BLOQUE_DATOS>\n"); xml.append( String.format( "\t<grupo_datos seq=\"ANNO_ACADEMICO\">\n\t\t<dato nombre_dato=\"C_ANNO\">%d</dato>\n\t</grupo_datos>\n", MaimonidesApp.getApplication().getAnoEscolar().getAno())); xml.append( String.format( "\t<grupo_datos seq=\"HORARIOS_REGULARES\" registros=\"%d\">\n", bloquesProfesores.size())); xml.append(Str.implode(bloquesProfesores, "")); xml.append("\t</grupo_datos>\n"); xml.append("</BLOQUE_DATOS>\n"); xml.append("</SERVICIO>\n"); // Ahora guardamos el contenido en el fichero ficheroXml = File.createTempFile("horarios_seneca", ".xml"); Archivo.setContenido(xml.toString(), "ISO-8859-1", ficheroXml, false); } catch (SQLException ex) { Logger.getLogger(ExportadorHorariosSeneca.class.getName()) .log(Level.SEVERE, "Error recuperando listado de horarios.", ex); } Obj.cerrar(st, res); return ficheroXml; }