UserXmlPreferencesMigrationDao.ktАннотации: param, micromata, Service, author, Autowired
Классы: UserXmlPreferencesMigrationDao
Функции (5): migrateAllUserPrefs, migrate, deleteOldKeys, migrateUserPrefs, migrate
Свойства (11): accessChecker, userGroupCache, userXmlPreferencesDao, userXmlPreferencesCache, persistenceService, list, versionNumber, numberOfUpdatedEntries, userId, user, data
Импорты: 8 пакетов
Пакет: org.projectforge.business.user
package org.projectforge.business.user
import org.apache.commons.lang3.Validate
import org.projectforge.business.user.UserXmlPreferencesDO.Companion.getCurrentVersion
import org.projectforge.framework.access.AccessChecker
import org.projectforge.framework.persistence.jpa.PfPersistenceService
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Service
/**
* Сохраняет все постоянные объекты пользователя, такие как настройки фильтров, личные настройки,
* и сохраняет их в базе данных.
*
* @author Kai Reinhard (k.reinhard@micromata.de)
*/
@Service
open class UserXmlPreferencesMigrationDao {
@Autowired
private lateinit var accessChecker: AccessChecker
@Autowired
private lateinit var userGroupCache: UserGroupCache
@Autowired
private lateinit var userXmlPreferencesDao: UserXmlPreferencesDao
@Autowired
private lateinit var userXmlPreferencesCache: UserXmlPreferencesCache
@Autowired
private lateinit var persistenceService: PfPersistenceService
open fun migrateAllUserPrefs(): String {
accessChecker.checkIsLoggedInUserMemberOfAdminGroup()
val buf = StringBuilder()
val list = persistenceService.executeQuery(
"from ${UserXmlPreferencesDO::class.java.simpleName} t order by user.id, key",
UserXmlPreferencesDO::class.java,
)
var versionNumber = Int.MAX_VALUE
for (userPrefs in list) {
buf.append(migrateUserPrefs(userPrefs))
if (userPrefs.version < versionNumber) {
versionNumber = userPrefs.version
}
}
migrate(versionNumber)
userXmlPreferencesCache.refresh()
return buf.toString()
}
/**
* Здесь можно вставить операторы обновления или удаления для всех записей xml-настроек пользователя
* (например, удалить все записи с неиспользуемым ключом).
*
* @param version Номер версии самой старой записи.
*/
protected fun migrate(version: Int) {
if (version < 4) {
// deleteOldKeys("org.projectforge.web.humanresources.HRViewForm:Filter");
// deleteOldKeys("org.projectforge.web.fibu.AuftragListAction:Filter");
// deleteOldKeys("OLD-VERSION-1.1");
// hibernateTemplate.flush();
}
}
/**
* Неподдерживаемые или неиспользуемые ключи следует удалять.
* Этот метод удаляет все записи с указанным ключом.
*
* @param key Ключ записей для удаления.
*/
protected fun deleteOldKeys(key: String) {
val numberOfUpdatedEntries = persistenceService.runInTransaction { context ->
context.executeUpdate("delete from ${UserXmlPreferencesDO::class.java.simpleName} where key = '$key'")
}
log.info("$numberOfUpdatedEntries '$key' записей удалено.")
}
protected fun migrateUserPrefs(userPrefs: UserXmlPreferencesDO): String {
val userId = userPrefs.user?.id ?: return ""
val buf = StringBuilder()
buf.append("Проверка настроек пользователя для '")
val user = userGroupCache.getUser(userId)
if (user != null) {
buf.append(user.username)
} else {
buf.append(userId)
}
buf.append("': ").append(userPrefs.identifier).append(" ... ")
if (userPrefs.version >= getCurrentVersion()) {
buf.append("версия ").append(userPrefs.version).append(" (актуально)\n")
return buf.toString()
}
migrate(userPrefs)
val data = userXmlPreferencesDao.deserialize(userPrefs)
buf.append("версия ")
buf.append(userPrefs.version)
if (data != null || "<null/>" == userPrefs.serializedValue) {
buf.append(" ОК ")
} else {
buf.append(" ***непригодно для повторного использования*** ")
}
buf.append("\n")
if (data == null) {
return buf.toString()
}
return buf.toString()
}
companion object {
private val log: Logger = LoggerFactory
.getLogger(UserXmlPreferencesMigrationDao::class.java)
/**
* Исправляет несовместимые версии настроек пользователя перед десериализацией.
*
* @param userPrefs
*/
// ... (сокращено, всего 127 строк)
868d6abb7 2025 -> 2026 63081666f Заголовки исходных файлов: 2024 -> 2025. 4d58829cc Рефакторинг UserPrefCache и UserXmlPreferencesCache. 85b4e1175 PfPersistenceService и PfPersistenceContext: запрос переименован в executeQuery. 108ecf629 !!!!! Большое изменение обработки транзакций: максимально возможное повторное использование PfPersistenceContext (ещё не завершено). Тесты пока не запускаются. Транзакции только для чтения в PfPersistenceService удалены, операции записи в PfPersistenceService удалены.