MerlinPlugin.ktАннотации: author, micromata
Классы: MerlinPlugin
Объекты: etc
Супертип(ы): AbstractPlugin
Функции (3): initialize, ensureUserLogSubscription, createUserLogSubscriptionMenuItem
Свойства (7): merlinTemplateDao, menuCreator, attachmentsService, attachmentsServicesRest, ID, RESOURCE_BUNDLE_NAME, username
Импорты: 18 пакетов
Пакет: org.projectforge.plugins.merlin
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
/**
* Инициализация вашего плагина. Зарегистрируйте все компоненты, такие как файлы i18n, объекты доступа к данным и т.д.
*
* @author Kai Reinhard (k.reinhard@micromata.de)
*/
class MerlinPlugin :
AbstractPlugin(
ID,
"Merlin-Word®-Templates",
"Плагин для шаблонов Microsoft Word® (с переменными, зависимыми переменными, а также последовательным выполнением). Полезен для контрактов, серийных документов и т.д."
) {
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)
// Регистрируем:
register(MerlinTemplateDao::class.java, merlinTemplateDao, "plugins.merlin")
// Будет отправлено клиенту, но должно игнорироваться при отправке обратно:
JacksonConfiguration.registerAllowedUnknownProperties(
MerlinVariable::class.java,
"allowedValuesFormatted",
"mappingMasterValues",
)
menuCreator.register(
MenuItemDefId.MISC,
MenuItemDef(info.id, "plugins.merlin.menu", "${Constants.REACT_APP_PATH}merlin")
)
// Всё, что связано с 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("Пользователь не указан")
return LogSubscription.ensureSubscription(
title = "Merlin",
user = username,
create = { title, user ->
LogSubscription(
title,
user,
LogEventLoggerNameMatcher("de.micromata.merlin", "org.projectforge.plugins.merlin"),
maxSize = 10000,
)
})
}
/**
* Также вызывает [ensureUserLogSubscription].
*/
fun createUserLogSubscriptionMenuItem(): MenuItem {
return MenuItem(
"logViewer",
i18nKey = "plugins.merlin.viewLogs",
url = PagesResolver.getDynamicPageUrl(
LogViewerPageRest::class.java,
id = ensureUserLogSubscription().id
),
type = MenuItemTargetType.REDIRECT,
)
}
}
}
868d6abb7 2025 -> 2026 63081666f Заголовки исходных файлов: 2024 -> 2025. 3785f8347 Миграция в процессе... 67805f2fc ThreadLocalUserContext.user -> ThreadLocalUserContext.loggedInUser (переименовано для избежания недопонимания в коде). b6092df09 Авторские права 2023 -> 2024