# 📁 Reporte de carpeta: `web` > Detalle de clases, métodos y comentarios extraídos automáticamente ### 🧩 Clase: `AdminController` **Ubicación:** `src\main\java\es\uv\saic\web\AdminController.java` **Estado de revisión:** ⚠️ *Pendiente* #### 🔍 Métodos detectados: ``` // GET para conseguir todas las instancias del sistema en ese momento. ``` - `getInstances()` — 🟢 Endpoint ``` // Función utilizada para conseguir las instancias que tiene todo el sistema ``` - `loadInstanceData()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno ``` // POST que recoge los campos introducidos en los inputs (Proceso, centro y titulación) y busca las instancias relacionadas ``` - `instantiate()` — 🟢 Endpoint - `Email()` — ⚪ Interno - `if()` — ⚪ Interno - `Email()` — ⚪ Interno - `if()` — ⚪ Interno ``` // Type T procedure for one whole categor ``` - `place()` — ⚪ Interno - `Email()` — ⚪ Interno - `if()` — ⚪ Interno ``` // Type C procedure for all active place ``` - `for()` — ⚪ Interno - `Email()` — ⚪ Interno - `if()` — ⚪ Interno - `Email()` — ⚪ Interno ``` // GET que recoge todos los procedimientos del sistema ``` - `getProcedures()` — 🟢 Endpoint ``` // Función utilizada en el GET que recoge todos los procedimientos ``` - `loadProceduresData()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno ``` // POST que elimina una instancia concreta ``` - `deleteInstance()` — 🟢 Endpoint ``` // POST que reinicia una instancia por completo ``` - `clearInstance()` — 🟢 Endpoint - `Email()` — ⚪ Interno ``` // POST que establece que una instancia ha sido cerrada, cambiandole su estado ``` - `closeInstance()` — 🟢 Endpoint ``` // POST que se encarga de eliminar una tarea concreta de una instancia ``` - `removeTask()` — 🟢 Endpoint ``` // POST que se encarga de reiniciar por completo una tarea de una instancia ``` - `clearTask()` — 🟢 Endpoint ``` // POST que reinicia una tarea del procedimiento, eliminando datos anteriores y creando una nueva vesión de esta ``` - `reloadTask()` — 🟢 Endpoint - `InstanciaTasca()` — ⚪ Interno - `Email()` — ⚪ Interno ``` // POST que tiene como objetivo reactivar una tarea ``` - `activateTask()` — 🟢 Endpoint - `InstanciaTasca()` — ⚪ Interno - `Email()` — ⚪ Interno ``` // POST que edita la información de una tarea ya existente ``` - `editTask()` — 🟢 Endpoint - `InstanciaTasca()` — ⚪ Interno - `Email()` — ⚪ Interno - `getMailing()` — 🟢 Endpoint - `sendMails()` — 🟢 Endpoint - `Email()` — ⚪ Interno ``` // POST para la creación de un procedimiento nuevo ``` - `newProcedure()` — 🟢 Endpoint - `Proces()` — ⚪ Interno - `Tasca()` — ⚪ Interno - `SimpleDateFormat()` — ⚪ Interno ``` // POST para editar un procedimiento ya existente ``` - `editProcedure()` — 🟢 Endpoint - `Tasca()` — ⚪ Interno - `Tasca()` — ⚪ Interno - `SimpleDateFormat()` — ⚪ Interno ``` // POST que elimina un procedimiento ``` - `removeProcedure()` — 🟢 Endpoint ``` // POST que le eliminar un usuario concreto del sitema ``` - `removeUserrole()` — 🟢 Endpoint ``` // POST para añadir un nuevo usuario al sistema ``` - `newUserrole()` — 🟢 Endpoint - `Usuari()` — ⚪ Interno - `UsuarisRol()` — ⚪ Interno - `UsuarisRol()` — ⚪ Interno - `UsuarisRol()` — ⚪ Interno - `UsuarisRol()` — ⚪ Interno - `getTemplates()` — 🟢 Endpoint ``` // GET que recoge todas las plantillas actuales del sistema ``` - `getTemplates2()` — 🟢 Endpoint - `File()` — ⚪ Interno - `File()` — ⚪ Interno - `File()` — ⚪ Interno - `if()` — ⚪ Interno - `loadTemplateData()` — ⚪ Interno ``` // POST que redefine que indicadores están asociados a una evidencia dentro de un proceso ``` - `updateTemplateInds()` — 🟢 Endpoint - `EvidenciaIndicadorEnquesta()` — ⚪ Interno - `EvidenciaIndicadorEnquestaPK()` — ⚪ Interno ``` // GET para abrir el editor de plantillas ``` - `getTemplateEditor()` — 🟢 Endpoint - `testTemplateEditor()` — 🟢 Endpoint ``` // GET para la carga del calendario ``` - `calendar()` — 🟢 Endpoint - `acreditacionsByCurs()` — 🟢 Endpoint - `AcreditacioTransfer()` — ⚪ Interno - `AcreditacioTransfer()` — ⚪ Interno - `AcreditacioTransfer()` — ⚪ Interno - `UpdateAcreditacio()` — 🟢 Endpoint - `SimpleDateFormat()` — ⚪ Interno - `SimpleDateFormat()` — ⚪ Interno - `SimpleDateFormat()` — ⚪ Interno - `SimpleDateFormat()` — ⚪ Interno --- ### 🧩 Clase: `AjaxController` **Ubicación:** `src\main\java\es\uv\saic\web\AjaxController.java` **Estado de revisión:** ⚠️ *Pendiente* #### 🔍 Métodos detectados: - `getActiveCentres()` — 🟢 Endpoint - `DummyDataTransfer()` — ⚪ Interno - `getActiveTitulationsByCenter()` — 🟢 Endpoint - `DummyDataTransfer()` — ⚪ Interno ``` // POST que buscar titulaciones que se encuentren asociadas a uno o varios centros ``` - `getTitulationsByCenter()` — 🟢 Endpoint - `DummyDataTransfer()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno ``` // POST que se utiliza para conseguir los cursos a partir de la titulación ``` - `getYearsByCenterTitulation()` — 🟢 Endpoint - `DummyDataTransfer()` — ⚪ Interno ``` // POST que se utiliza para conseguir los procedimiento que se han llevado a cabo por cursos y por titulación ``` - `getProceduresByCenterTitulationYear()` — 🟢 Endpoint - `DummyDataTransfer()` — ⚪ Interno ``` // POST para buscar pas evidencias a partir del año, centro y titulación ``` - `getEvidencesByCenterTitulationYear()` — 🟢 Endpoint - `DummyDataTransfer()` — ⚪ Interno ``` // POST que recoge toda las titulaciones que contiene un centro para el manager ``` - `getCenterTitulations()` — 🟢 Endpoint - `getTitulationsByCenters()` — 🟢 Endpoint - `DummyDataTransfer()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno - `if()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno - `if()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno - `getTitulationsByCenter()` — 🟢 Endpoint - `DummyDataTransfer()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno - `if()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno - `if()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno - `getAllTitulationsByCenter()` — 🟢 Endpoint - `DummyDataTransfer()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno ``` // POST para encontrar el centro a partir de los procedimientos ``` - `getAllCentresByAmbit()` — 🟢 Endpoint - `DummyDataTransfer()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno ``` // POST para encontrar un procedimiento concreto ``` - `findProcedure()` — 🟢 Endpoint - `Proces()` — ⚪ Interno - `if()` — ⚪ Interno ``` // POST para encontar las plantillas concretas para cierta titulación, centro o procedimiento ``` - `findTemplates()` — 🟢 Endpoint - `findTemplatesInds()` — 🟢 Endpoint ``` // GET para renderizar el formulario de cración de nueva tarea ``` - `newTaskForm()` — 🟢 Endpoint - `newUserRoleForm()` — 🟢 Endpoint - `findTemplate()` — 🟢 Endpoint ``` // GET para comprobar si una plantilla esta siendo usada ``` - `isTemplateUsed()` — 🟢 Endpoint ``` // POST para crear el form de creación de plantilla ``` - `formTemplate()` — 🟢 Endpoint - `Plantilla()` — ⚪ Interno - `if()` — ⚪ Interno - `if()` — ⚪ Interno ``` // DELETE para eliminar una plantilla concreta ``` - `formTemplateRemove()` — 🟢 Endpoint ``` // POST para guadar una de las plantillas ``` - `templateSave()` — 🟢 Endpoint - `if()` — ⚪ Interno - `Plantilla()` — ⚪ Interno - `saveTemplate()` — 🟢 Endpoint ``` // POST para añadir un evento al calendario ``` - `calendarAddEvent()` — 🟢 Endpoint - `SimpleDateFormat()` — ⚪ Interno - `SimpleDateFormat()` — ⚪ Interno - `Calendari()` — ⚪ Interno ``` // POST que actualiza el evento ddel calendario ``` - `calendarAddEvent()` — 🟢 Endpoint - `SimpleDateFormat()` — ⚪ Interno - `SimpleDateFormat()` — ⚪ Interno ``` // GET que recoge todos los eventos del calendario ``` - `calendarGetEvents()` — 🟢 Endpoint ``` // DELETE que elimina un evento del calendario ``` - `calendarDeleteEvent()` — 🟢 Endpoint ``` // POST para instanciar un proceso desde el calendario ``` - `instantiate()` — 🟢 Endpoint - `BigInteger()` — ⚪ Interno - `Email()` — ⚪ Interno - `if()` — ⚪ Interno - `BigInteger()` — ⚪ Interno - `Email()` — ⚪ Interno - `if()` — ⚪ Interno - `BigInteger()` — ⚪ Interno - `Email()` — ⚪ Interno - `Date()` — ⚪ Interno - `Date()` — ⚪ Interno - `groupedTitToText()` — ⚪ Interno - `if()` — ⚪ Interno - `if()` — ⚪ Interno --- ### 🧩 Clase: `DashboardController` **Ubicación:** `src\main\java\es\uv\saic\web\DashboardController.java` **Estado de revisión:** ⚠️ *Pendiente* #### 🔍 Métodos detectados: ``` // GET para cargar el dashboard con toda su información ``` - `getOrganList()` — 🟢 Endpoint - `if()` — ⚪ Interno - `if()` — ⚪ Interno - `if()` — ⚪ Interno ``` //GET para mostrar el dashboard a partir de un numero ruct ``` - `getDashboardOrgan()` — 🟢 Endpoint - `if()` — ⚪ Interno - `if()` — ⚪ Interno - `loadReports()` — ⚪ Interno - `AnyDimensioDTO()` — ⚪ Interno - `TreeDTOAny()` — ⚪ Interno - `TreeDTOOrgan()` — ⚪ Interno - `TreeDTOInstancia()` — ⚪ Interno - `compare()` — ⚪ Interno - `TreeDTOOrgan()` — ⚪ Interno - `TreeDTOInstancia()` — ⚪ Interno - `if()` — ⚪ Interno - `TreeDTODimensio()` — ⚪ Interno - `InstanciaDTO()` — ⚪ Interno - `DimensioInstanciesDTO()` — ⚪ Interno ``` // GET para conseguir la documentación ya a aportada a partir del id de la tituación ``` - `loadDocuments()` — 🟢 Endpoint - `CategoriaDocumentDTO()` — ⚪ Interno - `DocumentDTO()` — ⚪ Interno - `DocumentDTO()` — ⚪ Interno - `loadGantt()` — ⚪ Interno - `if()` — ⚪ Interno - `compare()` — ⚪ Interno - `getDocumentChildCats()` — 🟢 Endpoint - `getDocumentChildCatsU()` — 🟢 Endpoint ``` // POST para guardar un documento en el sistema ``` - `uploadDocument()` — 🟢 Endpoint - `Document()` — ⚪ Interno - `Date()` — ⚪ Interno ``` // POST para añadir un documento a un centro cocncreto ``` - `archiveDocuments()` — 🟢 Endpoint ``` // GET para conseguir todos los graficos a partir de un RUCT ``` - `getGraphDataList()` — 🟢 Endpoint ``` //GET para conseguir todos los datos concretos de tasas para las tablas ``` - `getGraphDataTaxes()` — 🟢 Endpoint ``` //GET para conseguir todos los datos concretos de cada gráfico ``` - `getGraphData()` — 🟢 Endpoint - `Indicador()` — ⚪ Interno - `CursoValor()` — ⚪ Interno - `if()` — ⚪ Interno - `CursoValor()` — ⚪ Interno - `Indicador()` — ⚪ Interno - `CursoValor()` — ⚪ Interno - `getLinks()` — 🟢 Endpoint - `createLink()` — 🟢 Endpoint - `SimpleDateFormat()` — ⚪ Interno - `Link()` — ⚪ Interno - `Date()` — ⚪ Interno - `deleteLink()` — 🟢 Endpoint ``` // Función encargada de cargar a los managers a partir del centro y titulación ``` - `loadManagers()` — ⚪ Interno - `compare()` — ⚪ Interno - `compare()` — ⚪ Interno ``` // Función para comprobar si un usario esta permitido para hacer una acción ``` - `isSuitable()` — ⚪ Interno - `if()` — ⚪ Interno - `if()` — ⚪ Interno ``` // Función para saber el tamaño de un documento concreto ``` - `getSize()` — ⚪ Interno - `FileSystemResource()` — ⚪ Interno - `bytesToHuman()` — ⚪ Interno - `StringCharacterIterator()` — ⚪ Interno --- ### 🧩 Clase: `DataController` **Ubicación:** `src\main\java\es\uv\saic\web\DataController.java` **Estado de revisión:** ⚠️ *Pendiente* #### 🔍 Métodos detectados: ``` // GET que carga la interfaz relacionada con toda la importación de datos ``` - `renderImport()` — 🟢 Endpoint ``` // POST encargado de importar los datos que han sido adjuntados ``` - `uploadFile()` — 🟢 Endpoint - `InputStreamReader()` — ⚪ Interno - `if()` — ⚪ Interno ``` // POST encargado de eliminar unos datos concretos ``` - `delete()` — 🟢 Endpoint ``` // POST encargado de mostrar los datos por pantalla ``` - `show()` — 🟢 Endpoint ``` // GET para mostrar el formulario de busqueda de datos ``` - `current()` — 🟢 Endpoint ``` //GET para cargar el apartado de coonsolidate ``` - `consolidate()` — 🟢 Endpoint - `check()` — ⚪ Interno ``` // POST que soluciona problemas de integridad que puedan tener los datos ``` - `fixIntegrityIssues()` — 🟢 Endpoint - `if()` — ⚪ Interno ``` // POST que soluciona problemas de duplicados que puedan tener los datos ``` - `fixDuplicatesIssues()` — 🟢 Endpoint ``` // POST que consolida los datos pasadas por la encuesta ``` - `consolidate()` — 🟢 Endpoint ``` // POST que comprueba los datos a partir de la encuesta ``` - `countByEnquesta()` — 🟢 Endpoint ``` // POST para mostrar los datos en columnas ``` - `listTableColumns()` — 🟢 Endpoint ``` // GET que muestra los datos de un curso que se ha elegido ``` - `show()` — 🟢 Endpoint ``` // POST que muestra los datos del curso actual ``` - `currentShow()` — 🟢 Endpoint - `if()` — ⚪ Interno - `getDatasources()` — 🟢 Endpoint --- ### 🧩 Clase: `DownloadController` **Ubicación:** `src\main\java\es\uv\saic\web\DownloadController.java` **Estado de revisión:** ⚠️ *Pendiente* #### 🔍 Métodos detectados: ``` /* * Download a file associated with a task instance * @param model * @param idInstanciaTasca The ID of the task instance * @param response HttpServletResponse * @return A FileSystemResource representing the file to download */ ``` - `download()` — 🟢 Endpoint - `FileSystemResource()` — ⚪ Interno - `FileSystemResource()` — ⚪ Interno - `FileNotFoundException()` — ⚪ Interno ``` /* * Download a document by its ID * @param model * @param idDocument The ID of the document to download * @param response HttpServletResponse * @return A FileSystemResource representing the document to download */ ``` - `downloadDocument()` — 🟢 Endpoint - `FileSystemResource()` — ⚪ Interno - `FileNotFoundException()` — ⚪ Interno ``` /* * Download the latest report for a given process and degree * @param model * @param idTitulacio The ID of the degree * @param nomProces The name of the process * @param response HttpServletResponse * @return A FileSystemResource representing the report to download */ ``` - `downloadReport()` — 🟢 Endpoint - `File()` — ⚪ Interno - `FileSystemResource()` — ⚪ Interno - `FileSystemResource()` — ⚪ Interno ``` /* * Download a populated template for a given task instance * @param model * @param idTascai The ID of the task instance * @param response HttpServletResponse * @return A byte array representing the populated template to download */ ``` - `downloadTemplate()` — 🟢 Endpoint ``` /* Check if specific template exists */ Integer idTitulacio = it.getInstancia().getTitulacio(); String templatePath = this.templatePath+tasca.getCodiEvidencia().replace(".", "_")+".docx"; if(it.getInstancia().getOrgan().getTambit().equals("G") | idTitulacio == 1) { File f = new File(this.templatePath+"/T1/"+tasca.getCodiEvidencia().replace(".", "_")+".docx"); if(f.exists() && !f.isDirectory()) { templatePath = this.templatePath+"/T1/"+tasca.getCodiEvidencia().replace(".", "_")+".docx"; } } else if(it.getInstancia().getOrgan().getTambit().equals("M") | idTitulacio == 2) { File f = new File(this.templatePath+"/T2/"+tasca.getCodiEvidencia().replace(".", "_")+".docx"); if(f.exists() && !f.isDirectory()) { templatePath = this.templatePath+"/T2/"+tasca.getCodiEvidencia().replace(".", "_")+".docx"; } } File f = new File(templatePath); if(!f.exists()) { FileNotFoundException e = new FileNotFoundException("No se ha encontrado la plantilla "+tasca.getCodiEvidencia()+".docx"); e.setStackTrace(new StackTraceElement[0]); throw e; } InputStream in = new FileInputStream(f); IXDocReport report = XDocReportRegistry.getRegistry().loadReport(in, reportId, TemplateEngineKind.Velocity); FieldsMetadata metadata = new FieldsMetadata(); metadata.addFieldAsImage("logo"); report.setFieldsMetadata(metadata); IContext context = report.createContext(); IImageProvider img; if(new File(this.logoPath+"C"+Integer.toString(it.getInstancia().getCentre())+".png").exists()) { img = new FileImageProvider(new File(this.logoPath+"C"+Integer.toString(it.getInstancia().getCentre())+".png")); } else { img = new FileImageProvider(new File(this.logoPath+"C0.png")); } context.put("logo", img); context.put("centre", it.getInstancia().getOrgan().getOrgan().getNomVal()); context.put("titulacio", it.getInstancia().getOrgan().getNomCas()); context.put("curs", Integer.toString(it.getInstancia().getProces().getCursAvaluat()-1)+" - "+Integer.toString(it.getInstancia().getProces().getCursAvaluat())); context.put("curs_anterior", Integer.toString(it.getInstancia().getProces().getCursAvaluat()-2)+" - "+Integer.toString(it.getInstancia().getProces().getCursAvaluat()-1)); Proces proces = it.getInstancia().getProces(); Integer idCentre = it.getInstancia().getCentre(); if(tasca.getTipus().getTipus() == 14) { // Iterable template task List titulacions = new ArrayList(); Integer ambit = idTitulacio/(int)1000; titulacions = os.getTitulacionsByTypeCentre(it.getInstancia().getOrgan().getOrgan().getId().getLugar(), ambit); List> data = new ArrayList>(); for(Organ x : titulacions) { HashMap t = getTemplateDataArray(x.getId().getLugar(), idCentre, proces.getCursAvaluat()); t.put("titulacio", x.getNomCas()); data.add(t); } context.put("data", data); getTemplateData(idTitulacio, idCentre, proces.getCursAvaluat(), context); } else { // NO iterable template task getTemplateData(idTitulacio, idCentre, proces.getCursAvaluat(), context); } ByteArrayOutputStream out = new ByteArrayOutputStream(); report.process(context, out); response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\""+tasca.getCodiEvidencia()+".docx\""); return out.toByteArray(); } /* * Populate the template data into the context * @param idTitulacio The ID of the degree * @param idCentre The ID of the center * @param curs The academic year * @param context The IContext to populate */ ``` - `getTemplateData()` — ⚪ Interno ``` /* Indicadores del data warehouse */ try { List indicadores; indicadores = this.is.getFromTitulacion(idTitulacio.toString(), curs); for(Indicador i : indicadores) { context.put(i.getIndicador(), i.getValor()); } } catch(Exception e) { } /* Indicadores de encuestas */ List enquestesT; enquestesT = this.ies.getAllInds(idTitulacio, idCentre, curs); for(IndicadorEnquestaRepository.IndicadorEnquestaValor i : enquestesT) { String indicador = i.getAmbit().equals("t") ? (i.getEnquesta()+"_"+i.getIndicador()) : (i.getEnquesta()+"_"+i.getIndicador()+"_"+i.getAmbit()); indicador = i.getTipus().equals("avg") ? indicador : (indicador += "_"+i.getTipus()); indicador = i.getCursd() == null ? indicador : (indicador += "_"+i.getCursd()); context.put(indicador, formatValue(i.getValor())); } } /* * Format a value for template insertion * @param v The value to format * @return The formatted value */ ``` - `formatValue()` — ⚪ Interno ``` /* * Get template data as a HashMap * @param idTitulacio The ID of the degree * @param idCentre The ID of the center * @param curs The academic year * @return A HashMap containing the template data */ private HashMap getTemplateDataArray(Integer idTitulacio, Integer idCentre, Integer curs) { HashMap info = new HashMap(); /* Indicadores del data warehouse */ try { List indicadores; indicadores = this.is.getFromTitulacion(idTitulacio.toString(), curs); for(Indicador i : indicadores) { info.put(i.getIndicador(), i.getValor()); } } catch(Exception e) { } /* Indicadores de encuestas */ List enquestesT; enquestesT = this.ies.getAllInds(idTitulacio, idCentre, curs); for(IndicadorEnquestaRepository.IndicadorEnquestaValor i : enquestesT) { String indicador = i.getAmbit().equals("t") ? (i.getEnquesta()+"_"+i.getIndicador()) : (i.getEnquesta()+"_"+i.getIndicador()+"_"+i.getAmbit()); indicador = i.getTipus().equals("avg") ? indicador : (indicador += "_"+i.getTipus()); indicador = i.getCursd() == null ? indicador : (indicador += "_"+i.getCursd()); info.put(indicador, formatValue(i.getValor())); } return info; } /* * Test endpoint to generate a populated template for a given task (id of task) * @param model * @param idTitulacio The ID of the degree * @param idCentre The ID of the center * @param idTascap The ID of the task * @param idProces The ID of the process * @param response HttpServletResponse * @return A byte array representing the populated template */ ``` - `testTemplate()` — 🟢 Endpoint ``` /* Check if specific template exists */ String templatePath = this.templatePath+tasca.getCodiEvidencia().replace(".", "_")+".docx"; if(titulacio.getTambit().equals("G") | idTitulacio == 1) { File f = new File(this.templatePath+"/T1/"+tasca.getCodiEvidencia().replace(".", "_")+".docx"); if(f.exists() && !f.isDirectory()) { templatePath = this.templatePath+"/T1/"+tasca.getCodiEvidencia().replace(".", "_")+".docx"; } } else if(titulacio.getTambit().equals("M") | idTitulacio == 2) { File f = new File(this.templatePath+"/T2/"+tasca.getCodiEvidencia().replace(".", "_")+".docx"); if(f.exists() && !f.isDirectory()) { templatePath = this.templatePath+"/T2/"+tasca.getCodiEvidencia().replace(".", "_")+".docx"; } } InputStream in = new FileInputStream(new File(templatePath)); IXDocReport report = XDocReportRegistry.getRegistry().loadReport(in, reportId, TemplateEngineKind.Velocity); FieldsMetadata metadata = new FieldsMetadata(); metadata.addFieldAsImage("logo"); report.setFieldsMetadata(metadata); IContext context = report.createContext(); IImageProvider img; if(new File(this.logoPath+"C"+Integer.toString(idCentre)+".png").exists()) { img = new FileImageProvider(new File(this.logoPath+"C"+Integer.toString(idCentre)+".png")); } else { img = new FileImageProvider(new File(this.logoPath+"C0.png")); } context.put("logo", img); context.put("centre", centre.getNomVal()); context.put("titulacio", titulacio.getNomVal()); context.put("curs", Integer.toString(proces.getCursAvaluat()-1)+" - "+Integer.toString(proces.getCursAvaluat())); context.put("curs_anterior", Integer.toString(proces.getCursAvaluat()-2)+" - "+Integer.toString(proces.getCursAvaluat()-1)); if(tasca.getTipus().getTipus() == 14) { // Iterable template task List titulacions = new ArrayList(); titulacions = os.getTitulacionsByTypeCentre(centre.getId().getLugar(), ambit); List> data = new ArrayList>(); for(Organ x : titulacions) { HashMap t = getTemplateDataArray(x.getId().getLugar(), idCentre, proces.getCursAvaluat()); t.put("titulacio", x.getNomCas()); data.add(t); } context.put("data", data); getTemplateData(idTitulacio, idCentre, proces.getCursAvaluat(), context); } else { // NO iterable template task getTemplateData(idTitulacio, idCentre, proces.getCursAvaluat(), context); } ByteArrayOutputStream out = new ByteArrayOutputStream(); report.process(context, out); response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\""+tasca.getCodiEvidencia()+".docx\""); return out.toByteArray(); } /* * Test endpoint to generate a populated template for a given degree and evidence (Type of task) * @param model * @param idTitulacio The ID of the degree * @param idCentre The ID of the center * @param evidencia The name of the evidence * @param curs The academic year * @param tipusTasca The type of task * @param response HttpServletResponse * @return A byte array representing the populated template */ ``` - `testTemplate()` — 🟢 Endpoint ``` /* Check if specific template exists */ String templatePath = this.templatePath+evidencia.replace(".", "_").replace(" (G)", "").replace(" (M)", "")+".docx"; if(idTitulacio < 2000 | idTitulacio == 1) { File f = new File(this.templatePath+"/T1/"+evidencia.replace(".", "_").replace(" (G)", "").replace(" (M)", "")+".docx"); if(f.exists() && !f.isDirectory()) { templatePath = this.templatePath+"/T1/"+evidencia.replace(".", "_").replace(" (G)", "").replace(" (M)", "")+".docx"; } ambit = 1; } else if((idTitulacio >= 2000 & idTitulacio < 3000) | idTitulacio == 2) { File f = new File(this.templatePath+"/T2/"+evidencia.replace(".", "_").replace(" (G)", "").replace(" (M)", "")+".docx"); if(f.exists() && !f.isDirectory()) { templatePath = this.templatePath+"/T2/"+evidencia.replace(".", "_").replace(" (G)", "").replace(" (M)", "")+".docx"; } ambit = 2; } InputStream in = new FileInputStream(new File(templatePath)); IXDocReport report = XDocReportRegistry.getRegistry().loadReport(in, reportId, TemplateEngineKind.Velocity); FieldsMetadata metadata = new FieldsMetadata(); metadata.addFieldAsImage("logo"); report.setFieldsMetadata(metadata); IContext context = report.createContext(); IImageProvider img; if(new File(this.logoPath+"C"+Integer.toString(idCentre)+".png").exists()) { img = new FileImageProvider(new File(this.logoPath+"C"+Integer.toString(idCentre)+".png")); } else { img = new FileImageProvider(new File(this.logoPath+"C0.png")); } context.put("logo", img); context.put("centre", centre.getNomVal()); context.put("titulacio", titulacio.getNomVal()); context.put("curs", Integer.toString(curs-1)+" - "+Integer.toString(curs)); context.put("curs_anterior", Integer.toString(curs-2)+" - "+Integer.toString(curs-1)); if(tipusTasca == 14) { // Iterable template task List titulacions = new ArrayList(); titulacions = os.getTitulacionsByTypeCentre(centre.getId().getLugar(), ambit); List> data = new ArrayList>(); for(Organ x : titulacions) { HashMap t = getTemplateDataArray(x.getId().getLugar(), idCentre, curs); t.put("titulacio", x.getNomCas()); data.add(t); } context.put("data", data); getTemplateData(idTitulacio, idCentre, curs, context); } else { // NO iterable template task getTemplateData(idTitulacio, idCentre, curs, context); } ByteArrayOutputStream out = new ByteArrayOutputStream(); report.process(context, out); response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\""+evidencia+".docx\""); return out.toByteArray(); } /* * Generate a PDF from the content of a task instance (unused) * @param model * @param idTascai The ID of the task instance * @param response HttpServletResponse * @return A byte array representing the generated PDF */ ``` - `downloadTemplatePdf()` — 🟢 Endpoint ``` /* * Generate a PDF preview from provided content * @param model * @param content The content to convert to PDF * @param idtascai Optional ID of the task instance for context * @param response HttpServletResponse */ ``` - `downloadTemplatePdf()` — 🟢 Endpoint --- ### 🧩 Clase: `ExportController` **Ubicación:** `src\main\java\es\uv\saic\web\ExportController.java` **Estado de revisión:** ⚠️ *Pendiente* #### 🔍 Métodos detectados: ``` /* * Export data for a given process and task as CSV * @param model * @param auth Authentication * @param response HttpServletResponse * @param id_p Process ID * @param id_t Task ID */ ``` - `exportData()` — 🟢 Endpoint ``` //@GetMapping("/export/{id_p}/{id_t}") //public void exportData(Model model, Authentication auth, HttpServletResponse response, //@PathVariable Integer id_p, @PathVariable Integer id_t) throws IOException { //if(!((Usuari)auth.getPrincipal()).isAdmin() & !((Usuari)auth.getPrincipal()).isDataTest()) { //return; //} // //response.setContentType("text/csv"); // response.setCharacterEncoding("UTF-8"); // response.setHeader("Content-Disposition", "attachment; filename=data_export.csv"); // //PrintWriter pw = response.getWriter(); //Proces p = this.ps.findByID(id_p); //List ins = p.getInstancies(); //List lines = new ArrayList<>(); //if(p.getNomProces().equals("SAEM")) { //String[] header = {"centre", "titulacio", "cod_int", "nom_int", "per_int", "obs_int", "cod_fin", "nom_fin", "per_fin", "obs_fin", "data_fi_docencia"}; //lines.add(header); //} //else { //String[] header = {"centre", "titulacio", "cod_assignatura_1er", "nom_assignatura_1er", "obs_assignatura_1er", "cod_assignatura_3er", "nom_assignatura_3er", "obs_assignatura_3er"}; //lines.add(header); //} // //for(Instancia i : ins) { //InstanciaTasca it = i.getInstanciaTasca().stream() // .filter(c -> id_t.equals(c.getTasca().getIdTascap())) // .findAny() // .orElse(null); //if(it == null) { //continue; //} //if(!it.getEstat().equals("E")){ //continue; //} // //System.out.println(it.getText()); //Document doc = Jsoup.parseBodyFragment(it.getText()); // int size = lines.get(0).length; // String[] line = new String[size]; // line[0] = i.getCentre().toString(); //line[1] = i.getTitulacio().toString(); //String[] ids = {"", "", ////"ind_enquestes_1er_modul_cod", "ind_enquestes_1er_modul_nom", "ind_enquestes_1er_modul_per", "ind_enquestes_1er_modul_obs", // //"ind_enquestes_3er_modul_cod", "ind_enquestes_3er_modul_nom", "ind_enquestes_3er_modul_per", "ind_enquestes_3er_modul_obs", // "ind_enquestes_1er_modul_cod", "ind_enquestes_1er_modul_nom", "ind_enquestes_1er_modul_obs", // "ind_enquestes_3er_modul_cod", "ind_enquestes_3er_modul_nom", "ind_enquestes_3er_modul_obs", // "mceEditable"}; // //for(int x = 2; x<=8; x++) { //if(ids[x].startsWith("ind_")) { //try { //if(ids[x].equals("ind_enquestes_1er_modul_obs")) { //line[x] = doc.getElementById("ind_enquestes_1er_modul_nom").nextElementSibling().text(); //} //else { //System.out.println(doc.getElementById(ids[x])); //line[x] = doc.getElementById(ids[x]).text(); //} // //} //catch(Exception e) { //line[x] = "[error]"; //System.out.println("instancia: "+i.getIdInstancia().toString()+", centre: "+i.getCentre().toString()+", titulacio: "+i.getTitulacio().toString()); //} //}/* //else { //try { //line[x] = doc.getElementsByClass(ids[x]).last().text(); //} //catch(Exception e) { //line[x] = "[error]"; //System.out.println("instancia: "+i.getIdInstancia().toString()+", centre: "+i.getCentre().toString()+", titulacio: "+i.getTitulacio().toString()); //} //}*/ //} // //lines.add(line); //} // //lines.stream() // .map(this::convertToCSV) // .forEach(pw::println); //pw.close(); //pw.flush(); //} /* * Export data for a given process and task as CSV (not used) * @param model * @param auth Authentication * @param response HttpServletResponse * @param id_p Process ID * @param id_t Task ID */ ``` - `exportData2()` — 🟢 Endpoint ``` /* * Convert an array of Strings to a single CSV line, escaping special characters * @param data Array of Strings to convert * @return A single CSV line as a String */ ``` - `convertToCSV()` — ⚪ Interno ``` /* * Escape special characters in a String for CSV format * @param data The String to escape * @return The escaped String */ ``` - `escapeSpecialCharacters()` — ⚪ Interno --- ### 🧩 Clase: `IndexController` **Ubicación:** `src\main\java\es\uv\saic\web\IndexController.java` **Estado de revisión:** ⚠️ *Pendiente* #### 🔍 Métodos detectados: ``` /* * Redirect root to /procedures if authenticated, to /login otherwise * @param model * @param auth Authentication * @return "procedures" if authenticated, "redirect: login" otherwise */ ``` - `getHome()` — 🟢 Endpoint --- ### 🧩 Clase: `KeepAliveController` **Ubicación:** `src\main\java\es\uv\saic\web\KeepAliveController.java` **Estado de revisión:** ⚠️ *Pendiente* #### 🔍 Métodos detectados: ``` /* * Simple endpoint to check if the user session is still active. * Returns "alive" if the user * is authenticated, "0" otherwise. * @param model * @param auth Authentication * @return "alive" if the user is * authenticated, "0" otherwise. */ ``` - `getItems()` — 🟢 Endpoint --- ### 🧩 Clase: `LoginController` **Ubicación:** `src\main\java\es\uv\saic\web\LoginController.java` **Estado de revisión:** ⚠️ *Pendiente* #### 🔍 Métodos detectados: - `get()` — 🟢 Endpoint --- ### 🧩 Clase: `ManagersController` **Ubicación:** `src\main\java\es\uv\saic\web\ManagersController.java` **Estado de revisión:** ⚠️ *Pendiente* #### 🔍 Métodos detectados: ``` /* * Load the managers administration page data into the model * - List of centres and titulacions the logged user can manage * - List of all users * - List of assignable roles * - If there are search results in the session, load them too * - If there is a roleExists attribute in the session, load it too * - The view is managers.html */ ``` - `managersForm()` — 🟢 Endpoint ``` /* * Process the search form submission and load the results into the model * @Param centres List of centre ids to search managers in * @Param titulacions List of titulacion ids to search managers in * @Return The view component list_managers */ ``` - `managersSearch()` — 🟢 Endpoint ``` /* * Load the search results into the model * @Param model The model to load the data into * @Param centres List of centre ids to search managers in * @Param titulacions List of titulacion ids to search managers in */ ``` - `loadManagers()` — ⚪ Interno - `compare()` — ⚪ Interno - `compare()` — ⚪ Interno --- ### 🧩 Clase: `ParseController` **Ubicación:** `src\main\java\es\uv\saic\web\ParseController.java` **Estado de revisión:** ⚠️ *Pendiente* #### 🔍 Métodos detectados: ``` /* * Load the parsing options page data into the model * @param model * @param auth Authentication * @param err Optional error message * @param ok Optional success message * @return The name of the view to render */ ``` - `getParse()` — 🟢 Endpoint - `if()` — ⚪ Interno ``` /* * Parse a given table from a given database for a given year * @param model * @param auth Authentication * @param response HttpServletResponse * @param database The database to parse from * @param table The table to parse from * @param year The year to parse from */ ``` - `doParse()` — 🟢 Endpoint ``` /* * Parse table depending on the action requested: mediasCentroNP, bienalesProfesGrado, etc * @param model * @param auth Authentication * @param response HttpServletResponse * @param action The action to perform */ ``` - `doAction()` — 🟢 Endpoint ``` /* * Method to delete survey indicators from the database * @param model * @param auth Authentication * @param response HttpServletResponse * @param action The survey to delete indicators from * @param year The year of the survey to delete indicators from (0 for all years) */ ``` - `doDelete()` — 🟢 Endpoint --- ### 🧩 Clase: `ProceduresController` **Ubicación:** `src\main\java\es\uv\saic\web\ProceduresController.java` **Estado de revisión:** ⚠️ *Pendiente* #### 🔍 Métodos detectados: ``` /* Redirect root to /procedures */ ``` - `getRoot()` — 🟢 Endpoint ``` /* * Load the list of active procedure instances for the logged-in user * * @param model * @param auth Authentication * @param session HttpSession * @param _new Optional parameter to indicate a new access * @return The name of the view to render */ ``` - `getActiveInstances()` — 🟢 Endpoint - `InstanciaTransfer()` — ⚪ Interno ``` /* * Loads a procedure instance and its tasks * * @param model * @param auth Authentication * @param session HttpSession * @param id Instancia ID Instance to load * @return The name of the view to render */ ``` - `getInstance()` — 🟢 Endpoint ``` /* * Updates a task instance with evidence files (for specific task types) * * @param model * @param auth Authentication * @param session HttpSession * @param id Instancia ID Instance to load * @param params Form parameters * @param evidencias List of evidence files (if any) * @return The number of files uploaded (as a String) * @throws IllegalStateException * @throws IOException * @throws InterruptedException */ ``` - `updateInstanciaTascaEvidencia()` — 🟢 Endpoint - `BigInteger()` — ⚪ Interno ``` /* Tipos de tarea permitidas */ final Set suitable = Set.of(1, 12, 14); boolean newTask = (suitable.contains(it.getTasca().getTipus().getTipus())) && it.getEstat().equals("E") && (((Usuari)auth.getPrincipal()).isAdmin() || ((Usuari)auth.getPrincipal()).isGranted()); if(suitable.contains(it.getTasca().getTipus().getTipus())) { // Evidencia iterable String fileName = ""; if(evidencias.size() > 1) { fileName = (newTask ? it.getIdInstanciaTasca().add(new BigInteger("1")).toString() : it.getIdInstanciaTasca().toString()) + ".zip"; try (ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(filePath+fileName))) { for(MultipartFile f : evidencias) { File tempFile = File.createTempFile("saic", "temp"); tempFile.deleteOnExit(); f.transferTo(tempFile); zipOut.putNextEntry(new ZipEntry(f.getOriginalFilename())); Files.copy(Paths.get(tempFile.getAbsolutePath()), zipOut); } } } else if(evidencias.size() == 1){ MultipartFile evidencia = evidencias.get(0); fileName = (newTask ? it.getIdInstanciaTasca().add(new BigInteger("1")).toString() : it.getIdInstanciaTasca().toString()) + "." + FilenameUtils.getExtension(evidencia.getOriginalFilename()); evidencia.transferTo(new File(filePath+fileName)); } else { return "0"; } if(newTask){ InstanciaTasca itNew = new InstanciaTasca(); itNew.setUsuari((Usuari)auth.getPrincipal()); itNew.setDataFet(new Date(System.currentTimeMillis())); itNew.setData(new Date(System.currentTimeMillis())); itNew.setEstat("E"); itNew.setEvidencia(fileName); itNew.setInstancia(it.getInstancia()); itNew.setTasca(it.getTasca()); itNew.setVersion(it.getVersion()+1); itNew.setIdInstanciaTasca(it.getIdInstanciaTasca().add(new BigInteger("1"))); its.save(itNew); } else { it.setEvidencia(fileName); it.setEstat("E"); this.saveChanges(model, auth, session, it); } } return Integer.toString(evidencias.size()); } /* * Updates a task instance * * @param model * @param auth Authentication * @param session HttpSession * @param id Instancia ID Instance to load * @param params Form parameters * @param evidencias List of evidence files (if any) * @return The name of the view to render */ ``` - `updateInstanciaTasca()` — 🟢 Endpoint - `BigInteger()` — ⚪ Interno - `if()` — ⚪ Interno ``` // SI/N ``` - `if()` — ⚪ Interno - `if()` — ⚪ Interno ``` /* * Saves changes to a task instance * * @param model * @param auth Authentication * @param session HttpSession * @param it InstanciaTasca to save */ ``` - `saveChanges()` — ⚪ Interno ``` /* * Saves a draft of a task instance (for specific task types) * * @param model * @param auth Authentication * @param session HttpSession * @param id Instancia ID Instance to load * @param text Text content of the draft * @param manual Whether the save was manually triggered by the user * @return The timestamp of the save operation formatted as a String */ ``` - `saveDraft()` — 🟢 Endpoint - `Date()` — ⚪ Interno - `InstanciaTascaVer()` — ⚪ Interno - `Timestamp()` — ⚪ Interno ``` /* * Loads a procedure instance and its tasks into the model * @param model * @param auth Authentication * @param id Instancia ID Instance to load * @return The name of the view to render */ ``` - `loadProcedure()` — ⚪ Interno - `InstanciaTransfer()` — ⚪ Interno - `InstanciaTascaTransfer()` — ⚪ Interno ``` /* Comprobar estado evidencia, si vacío inyectar contenido de plantilla asociada */ if(it.getText() == null && active) { itt.setText(pls.addTemplateData(it, p.getText())); } else if(active){ itt.setText(it.getText()); } } else { itt.setCodiEvidencia(it.getTasca().getCodiEvidencia()); itt.setNomEvidenciaCas(it.getTasca().getNomEvidenciaCas()); itt.setNomEvidenciaVal(it.getTasca().getNomEvidenciaVal()); itt.setEvidencia(it.getEvidencia()); } if(it.getUsuari() != null) { itt.setUsuariFet(it.getUsuari().getNom() + " " + it.getUsuari().getCognoms()); } else { itt.setUsuariFet(""); } itt.setAssignedToUser(its.isUserAuthorized(((Usuari)auth.getPrincipal()), itt.getIdInstanciaTasca())); itt.setOldEvidences(its.findOlderByProces(it.getInstancia().getCentre(), it.getInstancia().getTitulacio(), it.getInstancia().getProces().getNomProces(), i.getProces().getCursActivacio(), this.pls)); itt.setVersions(its.findOlderVersions(it.getInstancia().getIdInstancia(), it.getTasca().getIdTasca(), it.getVersion(), this.pls)); tasks.add(itt); } model.addAttribute("tasks", tasks); model.addAttribute("flow", this.getFlowDiagram(i.getProces())); } /* * Get all drafts for a given task instance * @param model * @param auth Authentication * @param session HttpSession * @param id InstanciaTasca ID to load drafts for * @return The name of the view to render */ ``` - `getDrafts()` — 🟢 Endpoint ``` /* * Get a specific draft for a given task instance * @param model * @param auth Authentication * @param session HttpSession * @param id InstanciaTasca ID to load drafts for * @param dataMod Timestamp of the draft to load * @return The InstanciaTascaVer object representing the draft */ ``` - `getDraft()` — 🟢 Endpoint ``` /* * Restore a specific draft for a given task instance * @param model * @param auth Authentication * @param session HttpSession * @param id InstanciaTasca ID to restore draft for * @param dataMod Timestamp of the draft to restore * @return "1" if successful, "0" otherwise */ ``` - `restoreDraft()` — 🟢 Endpoint ``` /* * Generate a flow diagram for a given process * @param proces The process to generate the flow diagram for * @return A String containing the flow diagram */ ``` - `getFlowDiagram()` — ⚪ Interno --- ### 🧩 Clase: `ActiveSession` **Ubicación:** `src\main\java\es\uv\saic\web\StatsController.java` **Estado de revisión:** ⚠️ *Pendiente* #### 🔍 Métodos detectados: - `setId()` — ⚪ Interno - `setUsername()` — ⚪ Interno - `setFullName()` — ⚪ Interno - `setNpi()` — ⚪ Interno - `setExpired()` — ⚪ Interno - `setLastRequest()` — ⚪ Interno - `getId()` — ⚪ Interno - `getUsername()` — ⚪ Interno - `getFullName()` — ⚪ Interno - `getNpi()` — ⚪ Interno - `getExpired()` — ⚪ Interno - `getLastRequest()` — ⚪ Interno - `setUsername()` — ⚪ Interno - `setFullName()` — ⚪ Interno - `setEmail()` — ⚪ Interno - `getUsername()` — ⚪ Interno - `getFullName()` — ⚪ Interno - `getEmail()` — ⚪ Interno ``` /* * Renders the admin stats page * * @param model The model to pass data to the view * @param auth The authentication object * @return The name of the view to render */ ``` - `getStats()` — 🟢 Endpoint - `ActiveSession()` — ⚪ Interno - `SimpleDateFormat()` — ⚪ Interno - `PendingEmail()` — ⚪ Interno --- ### 🧩 Clase: `PendingEmail` **Ubicación:** `src\main\java\es\uv\saic\web\StatsController.java` **Estado de revisión:** ⚠️ *Pendiente* #### 🔍 Métodos detectados: - `setId()` — ⚪ Interno - `setUsername()` — ⚪ Interno - `setFullName()` — ⚪ Interno - `setNpi()` — ⚪ Interno - `setExpired()` — ⚪ Interno - `setLastRequest()` — ⚪ Interno - `getId()` — ⚪ Interno - `getUsername()` — ⚪ Interno - `getFullName()` — ⚪ Interno - `getNpi()` — ⚪ Interno - `getExpired()` — ⚪ Interno - `getLastRequest()` — ⚪ Interno - `setUsername()` — ⚪ Interno - `setFullName()` — ⚪ Interno - `setEmail()` — ⚪ Interno - `getUsername()` — ⚪ Interno - `getFullName()` — ⚪ Interno - `getEmail()` — ⚪ Interno ``` /* * Renders the admin stats page * * @param model The model to pass data to the view * @param auth The authentication object * @return The name of the view to render */ ``` - `getStats()` — 🟢 Endpoint - `ActiveSession()` — ⚪ Interno - `SimpleDateFormat()` — ⚪ Interno - `PendingEmail()` — ⚪ Interno --- ### 🧩 Clase: `StatsController` **Ubicación:** `src\main\java\es\uv\saic\web\StatsController.java` **Estado de revisión:** ⚠️ *Pendiente* #### 🔍 Métodos detectados: - `setId()` — ⚪ Interno - `setUsername()` — ⚪ Interno - `setFullName()` — ⚪ Interno - `setNpi()` — ⚪ Interno - `setExpired()` — ⚪ Interno - `setLastRequest()` — ⚪ Interno - `getId()` — ⚪ Interno - `getUsername()` — ⚪ Interno - `getFullName()` — ⚪ Interno - `getNpi()` — ⚪ Interno - `getExpired()` — ⚪ Interno - `getLastRequest()` — ⚪ Interno - `setUsername()` — ⚪ Interno - `setFullName()` — ⚪ Interno - `setEmail()` — ⚪ Interno - `getUsername()` — ⚪ Interno - `getFullName()` — ⚪ Interno - `getEmail()` — ⚪ Interno ``` /* * Renders the admin stats page * * @param model The model to pass data to the view * @param auth The authentication object * @return The name of the view to render */ ``` - `getStats()` — 🟢 Endpoint - `ActiveSession()` — ⚪ Interno - `SimpleDateFormat()` — ⚪ Interno - `PendingEmail()` — ⚪ Interno --- ### 🧩 Clase: `SupervisionController` **Ubicación:** `src\main\java\es\uv\saic\web\SupervisionController.java` **Estado de revisión:** ⚠️ *Pendiente* #### 🔍 Métodos detectados: ``` /* * Renders the supervision page * * @param model The model to pass data to the view * @param auth The authentication object * @param session The HTTP session * @return The name of the view to render */ ``` - `supervisionForm()` — 🟢 Endpoint - `DummyDataTransfer()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno - `DummyDataTransfer()` — ⚪ Interno ``` /* * Handles the supervision search form submission * * @param model The model to pass data to the view * @param auth The authentication object * @param centres The selected centers * @param cursos The selected years * @param titulacions The selected titulacions * @param procediments The selected procedures * @param evidencies The selected evidences * @param searchType The type of search (by procedures or evidences) * @param session The HTTP session * @return The name of the view to render */ ``` - `supervisionSearch()` — 🟢 Endpoint - `SupervisionSearchParams()` — ⚪ Interno ``` /* * Restores the previous search results from the session * * @param model The model to pass data to the view * @param auth The authentication object * @param session The HTTP session * @return The name of the view to render */ ``` - `restoreSearch()` — 🟢 Endpoint ``` /* * Loads the search results based on the provided filters * * @param model The model to pass data to the view * @param auth The authentication object * @param centres The selected centers * @param titulacions The selected titulacions * @param cursos The selected years * @param procediments The selected procedures * @param evidencies The selected evidences * @param searchType The type of search (by procedures or evidences) */ ``` - `loadResults()` — ⚪ Interno - `InstanciaTransfer()` — ⚪ Interno --- ### 🧩 Clase: `TestController` **Ubicación:** `src\main\java\es\uv\saic\web\TestController.java` **Estado de revisión:** ⚠️ *Pendiente* #### 🔍 Métodos detectados: ``` /* * Generates PDFs for all instances of a given process and task for admin user * * @param auth The authentication object * @return A string indicating the result of the operation * @throws FileNotFoundException If a required file is not found * @throws IOException If an I/O error occurs * @throws InterruptedException If the thread is interrupted */ ``` - `generatePDF()` — 🟢 Endpoint --- ### 🧩 Clase: `WikiController` **Ubicación:** `src\main\java\es\uv\saic\web\WikiController.java` **Estado de revisión:** ⚠️ *Pendiente* #### 🔍 Métodos detectados: ``` /* * Renders the wiki page * * @param model The model to pass data to the view * @param auth The authentication object * @return The name of the view to render */ ``` - `renderWiki()` — 🟢 Endpoint ``` /* * Renders the wiki editor page * * @param model The model to pass data to the view * @param auth The authentication object * @return The name of the view to render */ ``` - `renderWikiEditor()` — 🟢 Endpoint ``` /* * Returns the wiki text for a given category * * @param model The model to pass data to the view * @param auth The authentication object * @param categoria The category of the wiki * @return The wiki text */ ``` - `renderWiki()` — 🟢 Endpoint ``` /* * Updates the wiki text for a given category * * @param model The model to pass data to the view * @param auth The authentication object * @param cat The category of the wiki * @param text The new wiki text * @return The updated wiki object */ ``` - `updateWiki()` — 🟢 Endpoint --- # 📈 Estadísticas finales - Total de clases: 18 - Total de métodos: 347 - Total de comentarios: 112 ✅ **Fin del reporte de carpeta.**