EN · DE · RU · FR · ES

#618: UserXmlPreferencesBaseDOSingleValueConverter.java

projectforge-business/src/main/java/org/projectforge/business/user/UserXmlPreferencesBaseDOSingleValueConverter.java Тип: Java · Роль: Управление пользователями · Источник: projectforge-business/src/main/java/org/projectforge/business/user/UserXmlPreferencesBaseDOSingleValueConverter.java 100 строк · 56 кода · 34 комментария · 10 пустых
Конвертер XML-потока, реализующий IConverter для типобезопасной сериализации/десериализации между строковыми представлениями и Java-объектами.

Структура кода

Пакет: org.projectforge.business.user

Классы: UserXmlPreferencesBaseDOSingleValueConverter

Расширяет: BaseDao

Реализует: SingleValueConverter

Методы (3): canConvert, toString, fromString

Импорты: 5 пакетов

Исходный код (сокращённый)

package org.projectforge.business.user;

import com.thoughtworks.xstream.converters.SingleValueConverter;
import org.apache.commons.lang3.StringUtils;
import org.projectforge.framework.persistence.api.BaseDO;
import org.projectforge.framework.persistence.api.BaseDao;
import org.springframework.context.ApplicationContext;

/**
 * Преобразует BaseDO в строки и обратно (с использованием идентификатора).
 *
 * @author Kai Reinhard (k.reinhard@micromata.de)
 */
public class UserXmlPreferencesBaseDOSingleValueConverter implements SingleValueConverter
{
  private static final org.slf4j.Logger log = org.slf4j.LoggerFactory
      .getLogger(UserXmlPreferencesBaseDOSingleValueConverter.class);

  private final Class<? extends BaseDao<?>> daoClass;

  private final Class<? extends BaseDO<?>> doClass;

  ApplicationContext applicationContext;

  /**
   * Маршалирует только идентификатор, а демаршалирует путём загрузки экземпляра по идентификатору из dao.
   *
   * @param daoClass Класс dao.
   * @param doClass Класс DO, который будет преобразован.
   * @see BaseDao#findOrLoad(Long)
   */
  public UserXmlPreferencesBaseDOSingleValueConverter(ApplicationContext applicationContext,
      final Class<? extends BaseDao<?>> daoClass,
      final Class<? extends BaseDO<?>> doClass)
  {
    this.applicationContext = applicationContext;
    this.daoClass = daoClass;
    this.doClass = doClass;
  }

  @SuppressWarnings("rawtypes")
  @Override
  public boolean canConvert(final Class type)
  {
    return doClass.isAssignableFrom(type);
  }

  @Override
  public String toString(final Object obj)
  {
    if (obj == null) {
      return null;
    }
    try {
      return String.valueOf(((BaseDO<?>) obj).getId());
    } catch (final Exception ex) {
      log.warn(ex.getMessage(), ex);
      return "";
    }
  }

  @Override
  public Object fromString(final String str)
  {
    if (StringUtils.isBlank(str)) {
      return null;
    }
    final Long id = Long.parseLong(str);
    final BaseDao<?> dao = applicationContext.getBean(daoClass);
    if (dao == null) {
      log.error("Не удалось получить dao '" + daoClass + "'. Он не зарегистрирован в реестре.");
      return null;
    } else {
      return dao.findOrLoad(id);
    }
  }
}

История Git

868d6abb7 2025 -> 2026
63081666f Заголовки исходных файлов: 2024-> 2025.
5f9bbfbd3 Исправление опечаток в каталоге projectforge-business
1b50060c3 BaseDao: переименовано: get -> find, save -> insert, getList -> select, load -> select
4c04cfd65 КРУПНОЕ ИЗМЕНЕНИЕ! Миграция целочисленных идентификаторов на Long (включая внешние ключи и т.д.)