# 📁 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.**