EN · DE · RU · FR · ES

#228: MerlinPlugin.kt

plugins/org.projectforge.plugins.merlin/src/main/kotlin/org/projectforge/plugins/merlin/MerlinPlugin.kt Type : Kotlin · Rôle : Enregistrement de plugin · Source : plugins/org.projectforge.plugins.merlin/src/main/kotlin/org/projectforge/plugins/merlin/MerlinPlugin.kt 120 lignes · 76 code · 33 commentaires · 11 vides
Classe d'enregistrement de plugin étendant AbstractPlugin. Déclare le nom du module, enregistre les DAO, les entrées de menu, les ressources i18n et la logique checkAccess pour le plugin Merlin.

Structure du code

Annotations : author, micromata

Classes : MerlinPlugin

Objets : etc

Supertype(s) : AbstractPlugin

Fonctions (3) : initialize, ensureUserLogSubscription, createUserLogSubscriptionMenuItem

Propriétés (7) : merlinTemplateDao, menuCreator, attachmentsService, attachmentsServicesRest, ID, RESOURCE_BUNDLE_NAME, username

Importations : 18 paquetages

Paquetage : org.projectforge.plugins.merlin

Code source (abrégé)

package org.projectforge.plugins.merlin

import org.projectforge.Constants
import org.projectforge.common.logging.LogEventLoggerNameMatcher
import org.projectforge.common.logging.LogSubscription
import org.projectforge.framework.jcr.AttachmentsService
import org.projectforge.framework.persistence.user.api.ThreadLocalUserContext
import org.projectforge.menu.MenuItem
import org.projectforge.menu.MenuItemTargetType
import org.projectforge.menu.builder.MenuCreator
import org.projectforge.menu.builder.MenuItemDef
import org.projectforge.menu.builder.MenuItemDefId
import org.projectforge.plugins.core.AbstractPlugin
import org.projectforge.plugins.core.PluginAdminService
import org.projectforge.plugins.merlin.rest.MerlinAttachmentsActionListener
import org.projectforge.rest.AttachmentsServicesRest
import org.projectforge.rest.admin.LogViewerPageRest
import org.projectforge.rest.config.JacksonConfiguration
import org.projectforge.rest.core.PagesResolver
import org.projectforge.web.WicketSupport

/**
 * Initialisation de votre plugin. Enregistrez tous vos composants tels que les fichiers i18n, les objets d'accès aux données, etc.
 *
 * @author Kai Reinhard (k.reinhard@micromata.de)
 */
class MerlinPlugin :
    AbstractPlugin(
        ID,
        "Merlin-Word®-Templates",
        "Plugin pour le templating Microsoft Word® (avec variables, variables dépendantes ainsi qu'exécution en série). Utile pour les contrats, les documents en série, etc."
    ) {

    override fun initialize() {
        val merlinTemplateDao = WicketSupport.get(MerlinTemplateDao::class.java)
        val menuCreator = WicketSupport.get(MenuCreator::class.java)
        val attachmentsService = WicketSupport.get(AttachmentsService::class.java)
        val attachmentsServicesRest = WicketSupport.get(AttachmentsServicesRest::class.java)
        // Enregistrez-le :
        register(MerlinTemplateDao::class.java, merlinTemplateDao, "plugins.merlin")

        // Sera uniquement livré au client mais doit être ignoré lors du renvoi depuis le client :
        JacksonConfiguration.registerAllowedUnknownProperties(
            MerlinVariable::class.java,
            "allowedValuesFormatted",
            "mappingMasterValues",
        )

        menuCreator.register(
            MenuItemDefId.MISC,
            MenuItemDef(info.id, "plugins.merlin.menu", "${Constants.REACT_APP_PATH}merlin")
        )

        // Tout le contenu i18n :
        addResourceBundle(RESOURCE_BUNDLE_NAME)

        attachmentsServicesRest.register(
            ID,
            MerlinAttachmentsActionListener(attachmentsService, merlinTemplateDao)
        )
    }

    companion object {
        const val ID = PluginAdminService.PLUGIN_MERLIN_ID
        const val RESOURCE_BUNDLE_NAME = "MerlinI18nResources"

        fun ensureUserLogSubscription(): LogSubscription {
            val username = ThreadLocalUserContext.loggedInUser!!.username ?: throw InternalError("Utilisateur non fourni")
            return LogSubscription.ensureSubscription(
                title = "Merlin",
                user = username,
                create = { title, user ->
                    LogSubscription(
                        title,
                        user,
                        LogEventLoggerNameMatcher("de.micromata.merlin", "org.projectforge.plugins.merlin"),
                        maxSize = 10000,
                    )
                })
        }

        /**
         * Appelle également [ensureUserLogSubscription].
         */
        fun createUserLogSubscriptionMenuItem(): MenuItem {
            return MenuItem(
                "logViewer",
                i18nKey = "plugins.merlin.viewLogs",
                url = PagesResolver.getDynamicPageUrl(
                    LogViewerPageRest::class.java,
                    id = ensureUserLogSubscription().id
                ),
                type = MenuItemTargetType.REDIRECT,
            )
        }
    }
}

Historique Git

868d6abb7 2025 -> 2026
63081666f En-têtes des fichiers source : 2024 -> 2025.
3785f8347 Travail de migration en cours...
67805f2fc ThreadLocalUserContext.user -> ThreadLocalUserContext.loggedInUser (renommé pour éviter les malentendus dans le code).
b6092df09 Copyright 2023 -> 2024