EN · DE · RU · FR · ES

#618: UserXmlPreferencesBaseDOSingleValueConverter.java

projectforge-business/src/main/java/org/projectforge/business/user/UserXmlPreferencesBaseDOSingleValueConverter.java Typ: Java · Rolle: Benutzerverwaltung · Quelle: projectforge-business/src/main/java/org/projectforge/business/user/UserXmlPreferencesBaseDOSingleValueConverter.java 100 Zeilen · 56 Code · 34 Kommentare · 10 leer
XML-Stream-Konverter, der IConverter für typsichere Serialisierung/Deserialisierung zwischen Zeichenketten-Darstellungen und Java-Objekten implementiert.

Codestruktur

Paket: org.projectforge.business.user

Klassen: UserXmlPreferencesBaseDOSingleValueConverter

Erweitert: BaseDao

Implementiert: SingleValueConverter

Methoden (3): canConvert, toString, fromString

Importe: 5 Pakete

Quellcode (gekürzt)

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;

/**
 * Konvertiert BaseDO von und zu Zeichenketten (unter Verwendung der 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;

  /**
   * Marshallt nur die ID und unmarshallt durch Laden der Instanz anhand der ID aus dem DAO.
   *
   * @param daoClass Klasse des DAO.
   * @param doClass Klasse des DO, das konvertiert wird.
   * @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 + "' konnte nicht abgerufen werden. Es ist nicht in der Registry registriert.");
      return null;
    } else {
      return dao.findOrLoad(id);
    }
  }
}

Git-Verlauf

868d6abb7 2025 -> 2026
63081666f Quellcode-Dateiköpfe: 2024 -> 2025.
5f9bbfbd3 Korrigiere Tippfehler im Verzeichnis projectforge-business
1b50060c3 BaseDao: umbenannt: get -> find, save -> insert, getList -> select, load -> select
4c04cfd65 MAJOR-CHANGE! Migration von Integer-IDs zu Long-IDs (einschließlich Fremdschlüsseln usw.)