EN · DE · RU · FR · ES

#618: UserXmlPreferencesBaseDOSingleValueConverter.java

projectforge-business/src/main/java/org/projectforge/business/user/UserXmlPreferencesBaseDOSingleValueConverter.java Type : Java · Rôle : Gestion des utilisateurs · Source : projectforge-business/src/main/java/org/projectforge/business/user/UserXmlPreferencesBaseDOSingleValueConverter.java 100 lignes · 56 code · 34 commentaires · 10 vides
Convertisseur de flux XML implémentant IConverter pour une sérialisation/désérialisation type-safe entre représentations chaîne de caractères et objets Java.

Structure du code

Paquetage : org.projectforge.business.user

Classes : UserXmlPreferencesBaseDOSingleValueConverter

Étend : BaseDao

Implémente : SingleValueConverter

Méthodes (3) : canConvert, toString, fromString

Importations : 5 paquetages

Code source (abrégé)

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;

/**
 * Convertit BaseDO depuis et vers des chaînes de caractères (en utilisant l'identifiant).
 *
 * @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;

  /**
   * Ne marshale que l'identifiant et dé marshale en chargeant l'instance par identifiant depuis le dao.
   *
   * @param daoClass Classe du dao.
   * @param doClass Classe du DO qui sera converti.
   * @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("Impossible d'obtenir le dao '" + daoClass + "'. Il n'est pas enregistré dans le registre.");
      return null;
    } else {
      return dao.findOrLoad(id);
    }
  }
}

Historique Git

868d6abb7 2025 -> 2026
63081666f En-têtes des fichiers source : 2024 -> 2025.
5f9bbfbd3 Correction de fautes de frappe dans le répertoire projectforge-business
1b50060c3 BaseDao : renommé : get -> find, save -> insert, getList -> select, load -> select
4c04cfd65 CHANGEMENT-MAJEUR ! Migration des identifiants integer vers Long (y compris les clés étrangères, etc.)