EN · DE · RU · FR · ES

#358: CollectionPropertyDelta.java

projectforge-business/src/main/java/de/micromata/hibernate/history/delta/CollectionPropertyDelta.java Тип: Java · Роль: Компонент · Источник: projectforge-business/src/main/java/de/micromata/hibernate/history/delta/CollectionPropertyDelta.java 112 строк · 65 кода · 33 комментария · 14 пустых
Файл исходного кода projectforge-business/src/main/java/de/micromata/hibernate/history/delta/CollectionPropertyDelta.java, содержащий Java-код для слоя компонентов.

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

Пакет: de.micromata.hibernate.history.delta

Классы: CollectionPropertyDelta

Расширяет: PropertyDelta

Методы (5): calculateAdditionsAndRemovals, toString, getNewObjectValue, splitElements, getOldObjectValue

Импорты: 4 пакета

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

package de.micromata.hibernate.history.delta;

import org.apache.commons.lang3.ClassUtils;
import org.apache.commons.lang3.StringUtils;
import org.hibernate.Session;

import java.util.*;

/**
 * Устаревший код для XML-персистентности БД.
 * 
 * @author Wolfgang Jung (w.jung@micromata.de)
 * 
 */
public class CollectionPropertyDelta extends PropertyDelta
{

  private transient Set<Object> additions = new HashSet<>();

  private transient Set<Object> removals = new HashSet<>();

  protected CollectionPropertyDelta()
  {
    // ничего не делать
  }

  public CollectionPropertyDelta(String propertyName, Class<?> propertyType, Collection<Object> oldValue,
      Collection<Object> newValue)
  {
    this.propertyName = propertyName;
    this.propertyType = ClassUtils.getShortClassName(propertyType);
    calculateAdditionsAndRemovals(oldValue, newValue);
    this.oldValue = StringUtils.join(removals.iterator(), ",");
    this.newValue = StringUtils.join(additions.iterator(), ",");
  }

  private void calculateAdditionsAndRemovals(Collection<Object> oldValue, Collection<Object> newValue)
  {
    // //////////////////////////////////////////////////////////////////////
    // Сначала определяем добавления
    if (newValue != null) {
      additions.addAll(newValue);
    }
    if (oldValue != null) {
      additions.removeAll(oldValue);
    }

    // //////////////////////////////////////////////////////////////////////
    // Затем определяем удаления
    if (oldValue != null) {
      removals.addAll(oldValue);
    }
    if (newValue != null) {
      removals.removeAll(newValue);
    }
  }

  @Override
  public String toString()
  {
    return "изменения " + propertyName + " новое=" + newValue + " старое=" + oldValue;
  }

  @Override
  public Object getNewObjectValue(final Session session)
  {
    return splitElements(getNewValue(), session);
  }

  private List<Object> splitElements(final String keyList, final Session session)
  {
    List<Object> entityList = new ArrayList<>();
    if (!StringUtils.isEmpty(keyList)) {
      for (String key : keyList.split(",")) {
        if (StringUtils.isEmpty(key)) {
          continue;
        }
        entityList.add(loadItem(propertyType, key, session));
      }
    }
    return entityList;
  }

  @Override
  public Object getOldObjectValue(final Session session)
  {
    return splitElements(getOldValue(), session);
  }
}

История Git

868d6abb7 2025 → 2026
63081666f Заголовки файлов исходного кода: 2024 → 2025.
b6092df09 Авторские права 2023 → 2024
ab45d51fa Авторские права 2001-2022 → 2001-2023.
5f7ef41b8 Авторские права 2021 → 2022