EN · DE · RU · FR · ES

#360: DeltaSetCalculator.java

projectforge-business/src/main/java/de/micromata/hibernate/history/delta/DeltaSetCalculator.java Java-Klasse, projectforge-business/src/main/java/de/micromata/hibernate/history/delta/DeltaSetCalculator.java 378 Zeilen · 271 Code · 81 Kommentare · 26 leer
Zweck: Quelldatei: hibernate/history/delta/DeltaSetCalculator.java. DeltaSetCalculator.java ist Teil der Open-Source-Projektmanagementanwendung ProjectForge.

Quellcode (erste 100 Zeilen)

/////////////////////////////////////////////////////////////////////////////
//
// Project ProjectForge Community Edition
//         www.projectforge.org
//
// Copyright (C) 2001-2026 Micromata GmbH, Germany (www.micromata.com)
//
// ProjectForge ist dual-lizenziert.
//
// Diese Community-Edition ist freie Software; Sie können es weiterverteilen und/oder
// modifizieren unter den Bedingungen der GNU General Public License, wie veröffentlicht
// von der Free Software Foundation; Version 3 der Lizenz.
//
// Diese Community-Edition wird in der Hoffnung verteilt, dass sie nützlich sein wird,
// aber OHNE JEGLICHE GEWÄHRLEISTUNG; ohne sogar die stillschweigende Garantie der
// MARKTGÄNGIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Siehe die GNU General
// Public License für weitere Details.
//
// Sie sollten eine Kopie der GNU General Public License zusammen mit
// diesem Programm erhalten haben; falls nicht, siehe http://www.gnu.org/licenses/.
//
/////////////////////////////////////////////////////////////////////////////

package de.micromata.hibernate.history.delta;

import org.projectforge.common.PropertyUtils;
import org.hibernate.Hibernate;
import org.hibernate.HibernateException;
import org.hibernate.SessionFactory;
import org.hibernate.collection.spi.PersistentCollection;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.io.Serializable;
import java.math.BigDecimal;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.*;

/**
 * Legacy, verwendet für XML-Persistenz der DB.
 *
 * @author Wolfgang Jung (w.jung@micromata.de)
 */
public class DeltaSetCalculator {
    private static final Logger log = LoggerFactory.getLogger(DeltaSetCalculator.class);

    private DeltaSetCalculator() {
        // nichts tun
    }

    /*
     * Eine Hibernate-spezifische Berechnung. Verwendet die Werte, die an die Hibernate Interceptor.onFlushDirty()-Methode übergeben werden, um die
     * Berechnung durchzuführen.
     *
     * @param propertyNames Ein String-Array aller Eigenschaftsnamen, die an die onFlushDirty-Methode übergeben wurden. @param
     * previousState Das Object-Array, das den vorherigen Zustand der in propertyNames benannten Eigenschaften darstellt. @param
     * currentState Das Object-Array, das den aktuellen Zustand der in propertyNames benannten Eigenschaften darstellt. @return Das DeltaSet, das die in den Eigenschaftszuständen festgestellten Änderungen darstellt.
     */
    public static DeltaSet calculateDeltaSet(SessionFactory sf, Set<String> validPropertyNames,
                                             Set<String> invalidPropertyNames,
                                             Serializable entityId, Object entity, String[] propertyNames, Object[] previousState, Object[] currentState) {
        if (previousState == null) {
            previousState = new Object[currentState.length];
        }
        if (propertyNames == null || currentState == null) {
            throw new IllegalArgumentException("Alle drei Arrays, die zur Berechnung eines Delta-Sets übergeben werden, müssen nicht-null sein");
        }
        if (propertyNames.length != previousState.length && previousState.length != currentState.length) {
            throw new IllegalArgumentException("Alle drei Arrays, die zur Berechnung eines Delta-Sets übergeben werden, müssen die gleiche Länge haben");
        }

        DeltaSet deltaSet = new DeltaSet();
        deltaSet.setEntity(entity.getClass());
        deltaSet.setId(entityId);
        try {
            checkProperties(entity, sf, validPropertyNames, invalidPropertyNames, propertyNames, previousState, currentState,
                    deltaSet);
        } catch (Throwable t) {
            log.error("Fehler bei der Bestimmung des Delta-Sets", t);
        } finally {
            log.debug("Bestimmung des Delta-Sets abgeschlossen");
        }
        return deltaSet;
    }

    /**
     * @param propertyNames
     * @param previousState
     * @param currentState
     * @param deltaSet
     */
    private static void checkProperties(Object entity, SessionFactory sf, Set<String> validPropertyNames,
                                        Set<String> invalidPropertyNames,
                                        String[] propertyNames, Object[] previousState, Object[] currentState, DeltaSet deltaSet) {

Git-Verlauf

868d6abb7 2025 -> 2026
63081666f Quellcode-Dateiköpfe: 2024-> 2025.
5f9bbfbd3 Korrigiere Tippfehler im Verzeichnis projectforge-business
a33f8f203 Migrationsarbeit in Bearbeitung... (alle Tests aller Pakete: OK).
c1d14ecdb Migrationsarbeit in Bearbeitung...

868d6abb7

2025 -> 2026
868d6abb75cd191a892911ac8e45058932cf9074
diff --git a/projectforge-business/src/main/java/de/micromata/hibernate/history/delta/DeltaSetCalculator.java b/projectforge-business/src/main/java/de/micromata/hibernate/history/delta/DeltaSetCalculator.java
index 69c69bd30..92e57b247 100644
--- a/projectforge-business/src/main/java/de/micromata/hibernate/history/delta/DeltaSetCalculator.java
+++ b/projectforge-business/src/main/java/de/micromata/hibernate/history/delta/DeltaSetCalculator.java
@@ -3,7 +3,7 @@
 // Project ProjectForge Community Edition
 //         www.projectforge.org
 //
-// Copyright (C) 2001-2025 Micromata GmbH, Germany (www.micromata.com)
+// Copyright (C) 2001-2026 Micromata GmbH, Germany (www.micromata.com)
 //
 // ProjectForge ist dual-lizenziert.
 //

63081666f

Quellcode-Dateiköpfe: 2024-> 2025.
63081666f620fb87315f01b817e560e0b2f6a33a
diff --git a/projectforge-business/src/main/java/de/micromata/hibernate/history/delta/DeltaSetCalculator.java b/projectforge-business/src/main/java/de/micromata/hibernate/history/delta/DeltaSetCalculator.java
index c2d16521a..69c69bd30 100644
--- a/projectforge-business/src/main/java/de/micromata/hibernate/history/delta/DeltaSetCalculator.java
+++ b/projectforge-business/src/main/java/de/micromata/hibernate/history/delta/DeltaSetCalculator.java
@@ -3,7 +3,7 @@
 // Project ProjectForge Community Edition
 //         www.projectforge.org
 //
-// Copyright (C) 2001-2024 Micromata GmbH, Germany (www.micromata.com)
+// Copyright (C) 2001-2025 Micromata GmbH, Germany (www.micromata.com)
 //
 // ProjectForge ist dual-lizenziert.
 //

5f9bbfbd3

Korrigiere Tippfehler im Verzeichnis projectforge-business
5f9bbfbd372a85f39c89de392a8565c5370a95cb
diff --git a/projectforge-business/src/main/java/de/micromata/hibernate/history/delta/DeltaSetCalculator.java b/projectforge-business/src/main/java/de/micromata/hibernate/history/delta/DeltaSetCalculator.java
index 89634fe29..c2d16521a 100644
--- a/projectforge-business/src/main/java/de/micromata/hibernate/history/delta/DeltaSetCalculator.java
+++ b/projectforge-business/src/main/java/de/micromata/hibernate/history/delta/DeltaSetCalculator.java
@@ -125,7 +125,7 @@ public class DeltaSetCalculator {
 
             // Versuche, den Eigenschaftstyp entweder aus currentState oder
             // previousState zu bestimmen... Randbemerkung: wenn beide null sind, können wir
-            // den propertyType nicht bestimmen, aber das ist OK, da keine Änderung aufgetreten ist (null==null)
+            // den propertyType nicht bestimmen, aber das ist in Ordnung, da keine Änderung aufgetreten ist (null==null)
             if (!isCurrentNull) {
                 propertyType = propertyCurrentState.getClass();
             } else if (!wasPreviousNull) {
@@ -148,7 +148,7 @@ public class DeltaSetCalculator {
     }
 
     /**
-     * Allgemeiner DeltaSet-Rechner.
+     * Allgemeiner DeltaSet-Rechner.
      */
     public static DeltaSet calculateDeltaSet(Object entity, SessionFactory sf, Serializable entityId, Class<?> entityType,
                                              Object obj1,
@@ -370,7 +370,7 @@ public class DeltaSetCalculator {
         }
       }
     } catch (Exception ex) {
-      log.error("Ausnahme aufgetreten:" + ex, ex);
+      log.error("Ausnahme aufgetreten:" + ex, ex);
     }*/
 
         return obj1.equals(obj2);

a33f8f203

Migrationsarbeit in Bearbeitung... (alle Tests aller Pakete: OK).
a33f8f203ba809d731307e4785e8ad761ab4bfc0
diff --git a/projectforge-business/src/main/java/de/micromata/hibernate/history/delta/DeltaSetCalculator.java b/projectforge-business/src/main/java/de/micromata/hibernate/history/delta/DeltaSetCalculator.java
index 2d4f6b1ae..89634fe29 100644
--- a/projectforge-business/src/main/java/de/micromata/hibernate/history/delta/DeltaSetCalculator.java
+++ b/projectforge-business/src/main/java/de/micromata/hibernate/history/delta/DeltaSetCalculator.java
@@ -23,15 +23,12 @@
 
 package de.micromata.hibernate.history.delta;
 
-import org.apache.commons.beanutils.PropertyUtils;
+import org.projectforge.common.PropertyUtils;
 import org.hibernate.Hibernate;
 import org.hibernate.HibernateException;
-import org.hibernate.QueryException;
 import org.hibernate.SessionFactory;
 import org.hibernate.collection.spi.PersistentCollection;
 import org.hibernate.engine.spi.SessionFactoryImplementor;
-import org.hibernate.metadata.ClassMetadata;
-import org.hibernate.type.CollectionType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -50,185 +47,185 @@ import java.util.*;
  * @author Wolfgang Jung (w.jung@micromata.de)
  */
 public class DeltaSetCalculator {
-  private static final Logger log = LoggerFactory.getLogger(DeltaSetCalculator.class);
+    private static final Logger log = LoggerFactory.getLogger(DeltaSetCalculator.class);
 
-  private DeltaSetCalculator() {
-    // nichts tun
-  }
-
-  /*
-   * Eine Hibernate-spezifische Berechnung. Verwendet die Werte, die an die Hibernate Interceptor.onFlushDirty()-Methode übergeben werden, um die
-   * Berechnung durchzuführen.
-   *
-   * @param propertyNames Ein String-Array aller Eigenschaftsnamen, die an die onFlushDirty-Methode übergeben wurden. @param
-   * previousState Das Object-Array, das den vorherigen Zustand der in propertyNames benannten Eigenschaften darstellt. @param
-   * currentState Das Object-Array, das den aktuellen Zustand der in propertyNames benannten Eigenschaften darstellt. @return Das DeltaSet, das die in den Eigenschaftszuständen festgestellten Änderungen darstellt.
-   */
-  public static DeltaSet calculateDeltaSet(SessionFactory sf, Set<String> validPropertyNames,
-                                           Set<String> invalidPropertyNames,
-                                           Serializable entityId, Object entity, String[] propertyNames, Object[] previousState, Object[] currentState) {
-    if (previousState == null) {
-      previousState = new Object[currentState.length];
-    }
-    if (propertyNames == null || currentState == null) {
-      throw new IllegalArgumentException("Alle drei Arrays, die zur Berechnung eines Delta-Sets übergeben werden, müssen nicht-null sein");
-    }
-    if (propertyNames.length != previousState.length && previousState.length != currentState.length) {
-      throw new IllegalArgumentException("Alle drei Arrays, die zur Berechnung eines Delta-Sets übergeben werden, müssen die gleiche Länge haben");
+    private DeltaSetCalculator() {
+        // nichts tun
     }
 
-    DeltaSet deltaSet = new DeltaSet();
-    deltaSet.setEntity(entity.getClass());
-    deltaSet.setId(entityId);

c1d14ecdb

Migrationsarbeit in Bearbeitung...
c1d14ecdb144fed4ddd60af928fa1c76c5074f62
diff --git a/projectforge-business/src/main/java/de/micromata/hibernate/history/delta/DeltaSetCalculator.java b/projectforge-business/src/main/java/de/micromata/hibernate/history/delta/DeltaSetCalculator.java
index 34ffe9af3..2d4f6b1ae 100644
--- a/projectforge-business/src/main/java/de/micromata/hibernate/history/delta/DeltaSetCalculator.java
+++ b/projectforge-business/src/main/java/de/micromata/hibernate/history/delta/DeltaSetCalculator.java
@@ -203,11 +203,11 @@ public class DeltaSetCalculator {
       } else if (propertyType.isArray()) {
         log.debug("Eigenschaft ist ein Array-Typ");
         delta = getArrayDelta(sf, propertyName, propertyType, oldValue, newValue, delta);
-      } else if (sf.getClassMetadata(propertyType) != null) {
+      /*} else if (sf.getClassMetadata(propertyType) != null) {
         log.debug("Eigenschaft ist ein Assoziationstyp");
         if (!areEqual(oldValue, newValue, sf)) {
           delta = new AssociationPropertyDelta(sf, propertyName, propertyType, oldValue, newValue);
-        }
+        }*/
       } else {
         log.debug("Eigenschaft war eine einfache Eigenschaft");
         if (!areEqual(oldValue, newValue, sf)) {
@@ -229,15 +229,15 @@ public class DeltaSetCalculator {
     if (element == null) {
       return null;
     }
-    try {
+/*    try {
       ClassMetadata classMetadata = factory.getClassMetadata(element.getClass());
       if (classMetadata != null) {
-        return classMetadata.getIdentifier(element/* , EntityMode.POJO */);
+        return classMetadata.getIdentifier(element/* , EntityMode.POJO * /);
       }
     } catch (HibernateException ex) {
       log.error("Ausnahme aufgetreten " + ex, ex);
       return null;
-    }
+    }*/
     return element;
   }
 
@@ -301,7 +301,7 @@ public class DeltaSetCalculator {
       }
     }
 
-    if (Hibernate.isInitialized(oldCollectionValue) && Hibernate.isInitialized(newCollectionValue)) {
+   /* if (Hibernate.isInitialized(oldCollectionValue) && Hibernate.isInitialized(newCollectionValue)) {
       CollectionPropertyDelta collectionDelta = null;
       Class returnedClass = Object.class;
       try {
@@ -327,7 +327,8 @@ public class DeltaSetCalculator {
     } else {
       log.debug("Eine (oder beide) Sammlungseigenschaften wurden zuvor nicht initialisiert; muss übersprungen werden");
     }
-    return delta;
+    return delta;*/
+    return null;
   }
 
   public static boolean areEqual(Object obj1, Object obj2, SessionFactory sf) {
@@ -360,20 +361,20 @@ public class DeltaSetCalculator {
    * @return
    */