EN · DE · RU · FR · ES

#76 : DataTransferAuditDO.kt

plugins/org.projectforge.plugins.datatransfer/src/main/kotlin/org/projectforge/plugins/datatransfer/DataTransferAuditDO.kt Type : Kotlin · Rôle : Enregistrement de plugin · Source : plugins/org.projectforge.plugins.datatransfer/src/main/kotlin/org/projectforge/plugins/datatransfer/DataTransferAuditDO.kt 182 lignes · 114 code · 44 commentaires · 24 vides
Entité JPA (objet de données) représentant DataTransferAudit dans la base de données. Mappe vers une table avec des annotations Hibernate, des relations JPA et des propriétés calculées transitoires.

Structure du code

Annotations : Indexed, micromata, Table, author, get, NamedQueries, JsonSerialize, Entity

Classes : DataTransferAuditDO, Action

Classes d'énumération : Action

Entités JPA : DataTransferAuditDO (table : t_plugin_datatransfer_audit)

Fonctions (2) : createdByUserAsString, toString

Propriétés (23) : id, timestamp, areaId, byUser, byExternalUser, eventType, description, descriptionOld, uploadByUser, filename, filenameOld, notified, timeAgo, eventAsString, byUserAsString, filenameAsString, descriptionAsString, DELETE_OLD_ENTRIES, FIND_BY_AREA_ID, FIND_BY_ID, FIND_DOWNLOADS_BY_AREA_ID, FIND_QUEUED_ENTRIES_SENT_BY_AREA_ID_IGNORE_TYPES, UPDATE_NOTIFICATION_STATUS

Importations : 11 paquets

Paquet : org.projectforge.plugins.datatransfer

Code source (abrégé)

package org.projectforge.plugins.datatransfer

import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.databind.annotation.JsonSerialize
import org.hibernate.search.mapper.pojo.mapping.definition.annotation.Indexed
import org.projectforge.Constants
import org.projectforge.framework.i18n.TimeAgo
import org.projectforge.framework.i18n.translate
import org.projectforge.framework.jcr.AttachmentsEventType
import org.projectforge.framework.persistence.user.entities.PFUserDO
import java.util.*
import jakarta.persistence.*
import org.projectforge.framework.json.IdOnlySerializer

/**
 * @author Kai Reinhard (k.reinhard@micromata.de)
 */
@Entity
@Indexed
@Table(name = "t_plugin_datatransfer_audit")
@NamedQueries(
  NamedQuery(
    name = DataTransferAuditDO.DELETE_OLD_ENTRIES,
    query = "delete from DataTransferAuditDO where timestamp<=:timestamp"
  ),
  NamedQuery(
    name = DataTransferAuditDO.FIND_DOWNLOADS_BY_AREA_ID,
    query = "from DataTransferAuditDO where areaId=:areaId and eventType in :eventTypes order by timestamp desc"
  ),
  NamedQuery(
    name = DataTransferAuditDO.FIND_BY_AREA_ID,
    query = "from DataTransferAuditDO where areaId=:areaId order by timestamp desc"
  ),
  NamedQuery(
    name = DataTransferAuditDO.FIND_BY_ID,
    query = "from DataTransferAuditDO where id=:id"
  ),
  NamedQuery(
    name = DataTransferAuditDO.FIND_QUEUED_ENTRIES_SENT_BY_AREA_ID_IGNORE_TYPES,
    query = "from DataTransferAuditDO where areaId=:areaId and notified=false and eventType not in :eventTypes order by timestamp desc"
  ),
  NamedQuery(
    name = DataTransferAuditDO.UPDATE_NOTIFICATION_STATUS,
    query = "update DataTransferAuditDO set notified=true where id IN :idList"
  ),
)
open class DataTransferAuditDO {
  enum class Action { DELETE, DOWNLOAD, MODIFIED, UPLOAD }

  @get:Id
  @get:GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "hibernate_sequence")
  @get:Column(name = "pk")
  open var id: Long? = null

  @get:Column
  open var timestamp: Date? = null

  /**
   * Aucune contrainte (la zone peut être supprimée entre-temps).
   */
  @get:Column(name = "area_fk", nullable = false)
  open var areaId: Long? = null

  @get:ManyToOne(fetch = FetchType.LAZY)
  @get:JoinColumn(name = "by_user_fk")
  @JsonSerialize(using = IdOnlySerializer::class)
  open var byUser: PFUserDO? = null

  @get:Column(name = "by_external_user", length = 4000)
  open var byExternalUser: String? = null


  @get:Enumerated(EnumType.STRING)
  @get:Column(name = "event_type", length = 20, nullable = false)
  open var eventType: AttachmentsEventType? = null

  @get:Column(length = Constants.LENGTH_TEXT)
  open var description: String? = null

  /**
   * Ancienne valeur de la description (si modifiée).
   */
  @get:Column(name = "description_old", length = Constants.LENGTH_TEXT)
  open var descriptionOld: String? = null

  /**
   * L'utilisateur a téléchargé le fichier. Il est stocké ici, car le fichier pourrait être supprimé entre-temps pour informer
   * cet utilisateur de la suppression et de toute autre modification et téléchargement.
   */
  @get:ManyToOne(fetch = FetchType.LAZY)
  @get:JoinColumn(name = "upload_by_user_fk")
  @JsonSerialize(using = IdOnlySerializer::class)
  open var uploadByUser: PFUserDO? = null

  @get:Column(length = 1000)
  open var filename: String? = null

  /**
   * Ancienne valeur de la description (si modifiée).
   */
  @get:Column(name = "filename_old", length = 1000)
  open var filenameOld: String? = null

  /**
   * Notification envoyée à tous les observateurs ? Est également défini sur true après le traitement, si aucun observateur n'est enregistré.
   */
  @get:Column(name = "notified")
  open var notified: Boolean = false

  /**
   * Horodatage de l'événement sous forme de message temporel lisible.
   */
  @get:Transient
  @get:JsonProperty(access = JsonProperty.Access.READ_ONLY)
  open val timeAgo
    get() = TimeAgo.getMessage(timestamp)

  @get:Transient
  @get:JsonProperty(access = JsonProperty.Access.READ_ONLY)
// ... (tronqué, 160 lignes au total)

Historique Git

868d6abb7 2025 -> 2026
63081666f En-têtes des fichiers source : 2024 -> 2025.
0237d5eba Réorganisation de la sérialisation JSON : introduction de IdOnlySerializer et IdsOnlySerializer.
ca9851ba0 WIP : gradle...
1ffa5a1ef WIP : gradle...