Here is the HTML translated into French, with the language set to `fr` and the FR link marked as active. The title includes `[FR]`. ```html #93 : DataTransferPageRest.kt [FR]
EN · DE · RU · FR · ES

#93 : DataTransferPageRest.kt

plugins/org.projectforge.plugins.datatransfer/src/main/kotlin/org/projectforge/plugins/datatransfer/rest/DataTransferPageRest.kt Type : Kotlin · Rôle : Enregistrement de plugin · Source : plugins/org.projectforge.plugins.datatransfer/src/main/kotlin/org/projectforge/plugins/datatransfer/rest/DataTransferPageRest.kt 366 lignes · 310 code · 38 commentaires · 18 vides
Point de terminaison de l'API REST pour DataTransfer. Gère les requêtes HTTP et renvoie des réponses JSON pour le frontend React.

Structure du code

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

Classes : DataTransferPageRest

Supertype(s) : AbstractDynamicPageRest

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

Propriétés (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

Importations : 30 paquets

Paquet : org.projectforge.plugins.datatransfer.rest

Code source (abrégé)

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

/**
 * Page de la zone de transfert de données avec la liste des pièces jointes (incluant téléchargement et édition).
 */
@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) {
      // la boîte personnelle de l'utilisateur connecté est demandée :
      id = dataTransferAreaDao.ensurePersonalBox(ThreadLocalUserContext.loggedInUserId!!)?.id
    }
    id ?: throw IllegalAccessException("Le paramètre id n'est pas un entier ou aucune boîte personnelle trouvée.")
    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) {
      // Téléchargement de tout sauf pour les pièces jointes d'une taille totale supérieure à 1 Go.
      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
        )
// ... (tronqué, total 344 lignes)

Historique Git

868d6abb7 2025 -> 2026
63081666f En-têtes des fichiers source : 2024 -> 2025.
4942c854d Travaux de migration en cours...
1b50060c3 BaseDao : renommé : get -> find, save -> insert, getList -> select, load -> select
2a8ea2076 Travaux de migration en cours... BaseDao refactorisé (pas encore terminé) méthodes internes* renommées.