EN · DE · RU · FR · ES

#618: UserXmlPreferencesBaseDOSingleValueConverter.java

projectforge-business/src/main/java/org/projectforge/business/user/UserXmlPreferencesBaseDOSingleValueConverter.java Tipo: Java · Rol: Gestión de usuarios · Fuente: projectforge-business/src/main/java/org/projectforge/business/user/UserXmlPreferencesBaseDOSingleValueConverter.java 100 líneas · 56 código · 34 comentarios · 10 en blanco
Convertidor de flujo XML que implementa IConverter para serialización/deserialización con seguridad de tipos entre representaciones de cadena y objetos Java.

Estructura del código

Paquete: org.projectforge.business.user

Clases: UserXmlPreferencesBaseDOSingleValueConverter

Extiende: BaseDao

Implementa: SingleValueConverter

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

Importaciones: 5 paquetes

Código fuente (resumido)

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;

/**
 * Convierte BaseDO desde y hacia cadenas (usando el id).
 *
 * @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;

  /**
   * Serializa solo el id y deserializa cargando la instancia por id desde el dao.
   *
   * @param daoClass Clase del dao.
   * @param doClass Clase del DO que se convertirá.
   * @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("No se pudo obtener el dao '" + daoClass + "'. No está registrado en el Registro.");
      return null;
    } else {
      return dao.findOrLoad(id);
    }
  }
}

Historial de Git

868d6abb7 2025 -> 2026
63081666f Encabezados de archivos fuente: 2024-> 2025.
5f9bbfbd3 Corrección de errores tipográficos en el directorio projectforge-business
1b50060c3 BaseDao: renombrado: get -> find, save -> insert, getList -> select, load -> select
4c04cfd65 CAMBIO IMPORTANTE: Migración de ids enteros a ids Long (incluyendo fk's etc.)