EN · DE · RU · FR · ES

#618: UserXmlPreferencesBaseDOSingleValueConverter.java

projectforge-business/src/main/java/org/projectforge/business/user/UserXmlPreferencesBaseDOSingleValueConverter.java Type: Java · Role: User Management · Source: projectforge-business/src/main/java/org/projectforge/business/user/UserXmlPreferencesBaseDOSingleValueConverter.java 100 lines · 56 code · 34 comments · 10 blank
XML stream converter implementing IConverter for type-safe serialization/deserialization between string representations and Java objects.

Code Structure

Package: org.projectforge.business.user

Classes: UserXmlPreferencesBaseDOSingleValueConverter

Extends: BaseDao

Implements: SingleValueConverter

Methods (3): canConvert, toString, fromString

Imports: 5 packages

Source Code (abridged)

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;

/**
 * Converts BaseDO from and to strings (using the 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;

  /**
   * Marshals only the id and unmarshals by loading the instance by id from the dao.
   *
   * @param daoClass Class of the dao.
   * @param doClass Class of the DO which will be converted.
   * @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("Could not get dao '" + daoClass + "'. It's not registered in the Registry.");
      return null;
    } else {
      return dao.findOrLoad(id);
    }
  }
}

Git History

868d6abb7 2025 -> 2026
63081666f Source file headers: 2024-> 2025.
5f9bbfbd3 Fix typos in projectforge-business directory
1b50060c3 BaseDao: renamed: get -> find, save -> insert, getList -> select, load -> select
4c04cfd65 MAJOR-CHANGE! Migration of integer id's to Long id's (including fk's etc.)