Here is the Spanish translation of the provided HTML, with the `lang` attribute set to `es`, the language switcher marking ES as active, and the title updated with `[ES]`. ```html #93: DataTransferPageRest.kt [ES]
EN · DE · RU · FR · ES

#93: DataTransferPageRest.kt

plugins/org.projectforge.plugins.datatransfer/src/main/kotlin/org/projectforge/plugins/datatransfer/rest/DataTransferPageRest.kt Tipo: Kotlin · Rol: Registro de Plugin · Fuente: plugins/org.projectforge.plugins.datatransfer/src/main/kotlin/org/projectforge/plugins/datatransfer/rest/DataTransferPageRest.kt 366 líneas · 310 código · 38 comentarios · 18 en blanco
Punto final de la API REST para DataTransfer. Maneja solicitudes HTTP y devuelve respuestas JSON para el frontend React.

Estructura del Código

Anotaciones: PostConstruct, Valid, GetMapping, RequestBody, PathVariable, Autowired, return, RequestMapping, RestController, PostMapping, RequestParam

Clases: DataTransferPageRest

Super-tipo(s): AbstractDynamicPageRest

Funciones (7): postConstruct, downloadAll, getForm, watchFields, isLoggedInUserObserver, hasEditAccess, convertData

Propiedades (25): attachmentsService, attachmentsServicesRest, dataTransferAreaPagesRest, dataTransferAreaDao, groupService, pair, dbObj, dto, id, pair, dbObj, dto, layout, attachmentsFieldset, fieldSet, id, userWantsToOserveArea, loggedInUser, dbDto, dbObj, newObservers, user, dbObj, dto, accessGroupUsers

Importaciones: 30 paquetes

Paquete: org.projectforge.plugins.datatransfer.rest

Código Fuente (resumido)

package org.projectforge.plugins.datatransfer.rest

import org.projectforge.business.group.service.GroupService
import org.projectforge.business.user.service.UserService
import org.projectforge.common.NumberOfBytes
import org.projectforge.framework.jcr.AttachmentsService
import org.projectforge.framework.persistence.user.api.ThreadLocalUserContext
import org.projectforge.framework.persistence.user.entities.PFUserDO
import org.projectforge.framework.utils.NumberHelper
import org.projectforge.menu.MenuItem
import org.projectforge.menu.MenuItemTargetType
import org.projectforge.model.rest.RestPaths
import org.projectforge.plugins.datatransfer.DataTransferAreaDO
import org.projectforge.plugins.datatransfer.DataTransferAreaDao
import org.projectforge.plugins.datatransfer.DataTransferPlugin
import org.projectforge.plugins.datatransfer.DataTransferUtils
import org.projectforge.rest.AttachmentsServicesRest
import org.projectforge.rest.config.Rest
import org.projectforge.rest.core.AbstractDynamicPageRest
import org.projectforge.rest.core.PagesResolver
import org.projectforge.rest.core.RestResolver
import org.projectforge.rest.dto.FormLayoutData
import org.projectforge.rest.dto.PostData
import org.projectforge.rest.dto.User
import org.projectforge.ui.*
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.*
import jakarta.annotation.PostConstruct
import jakarta.servlet.http.HttpServletRequest
import jakarta.servlet.http.HttpServletResponse
import jakarta.validation.Valid

/**
 * Página del área de transferencia de datos con lista de archivos adjuntos (incluyendo carga/descarga y edición).
 */
@RestController
@RequestMapping("${Rest.URL}/datatransferfiles")
class DataTransferPageRest : AbstractDynamicPageRest() {
  @Autowired
  private lateinit var attachmentsService: AttachmentsService

  @Autowired
  private lateinit var attachmentsServicesRest: AttachmentsServicesRest

  @Autowired
  private lateinit var dataTransferAreaPagesRest: DataTransferAreaPagesRest

  @Autowired
  private lateinit var dataTransferAreaDao: DataTransferAreaDao

  @Autowired
  private lateinit var groupService: GroupService

  @PostConstruct
  private fun postConstruct() {
    attachmentsServicesRest.register(
      dataTransferAreaPagesRest.category,
      DataTransferAttachmentsActionListener(attachmentsService, dataTransferAreaDao)
    )
  }

  @GetMapping("downloadAll/{id}")
  fun downloadAll(
    @PathVariable("id", required = true) id: Long,
    response: HttpServletResponse
  ) {
    val pair = convertData(id)
    val dbObj = pair.first
    val dto = pair.second
    DataTransferRestUtils.multiDownload(
      response,
      attachmentsService,
      dataTransferAreaPagesRest.attachmentsAccessChecker,
      dbObj,
      dto.areaName,
      jcrPath = dataTransferAreaPagesRest.jcrPath!!,
      id,
      dto.attachments,
      byUser = ThreadLocalUserContext.loggedInUser
    )
  }

  @GetMapping("dynamic")
  fun getForm(request: HttpServletRequest, @RequestParam("id") idString: String?): FormLayoutData {
    var id = NumberHelper.parseLong(idString)
    if (id == -1L) {
      // se solicita la bandeja personal del usuario conectado:
      id = dataTransferAreaDao.ensurePersonalBox(ThreadLocalUserContext.loggedInUserId!!)?.id
    }
    id ?: throw IllegalAccessException("El parámetro id no es un entero o no se encontró ninguna bandeja personal.")
    val pair = convertData(id)
    val dbObj = pair.first
    val dto = pair.second
    val layout = UILayout("plugins.datatransfer.title.heading")
    val attachmentsFieldset = UIFieldset(title = "'${dto.areaName}")
    attachmentsFieldset.add(
      UIAttachmentList(
        DataTransferPlugin.ID,
        id,
        showExpiryInfo = true,
        maxSizeInKB = DataTransferAreaDao.getMaxUploadFileSizeKB(dbObj)
      )
    )
    if ((dto.attachmentsSize ?: 0) in 1..NumberOfBytes.GIGA_BYTES) {
      // Descargar todo no para archivos adjuntos con un tamaño total superior a 1 GB.
      attachmentsFieldset.add(
        UIButton.createDownloadButton(
          id = "downloadAll",
          title = "plugins.datatransfer.button.downloadAll",
          tooltip = "plugins.datatransfer.button.downloadAll.info",
          responseAction = ResponseAction(
            RestResolver.getRestUrl(
              this.javaClass,
              "downloadAll/$id"
            ), targetType = TargetType.DOWNLOAD
          ),
          default = true
        )
// ... (truncado, total 344 líneas)

Historial de Git

868d6abb7 2025 -> 2026
63081666f Encabezados de archivos fuente: 2024 -> 2025.
4942c854d Trabajo de migración en curso...
1b50060c3 BaseDao: renombrado: get -> find, save -> insert, getList -> select, load -> select
2a8ea2076 Trabajo de migración en curso... BaseDao refactorizado (aún no terminado) métodos internos* renombrados.