From 572bb41b7396786753de0526fbcebb47f45452e4 Mon Sep 17 00:00:00 2001 From: Robin Bygrave Date: Thu, 3 Sep 2015 14:31:36 +1200 Subject: [PATCH] Code Cleanup - move diff flatten into DiffHelp class from DiffHelpUpdate #406 --- .../ebeaninternal/server/core/DiffHelp.java | 52 ++++++++++++++++ .../server/core/DiffHelpUpdate.java | 62 ------------------- .../server/deploy/BeanDescriptor.java | 4 +- 3 files changed, 54 insertions(+), 64 deletions(-) delete mode 100644 src/main/java/com/avaje/ebeaninternal/server/core/DiffHelpUpdate.java diff --git a/src/main/java/com/avaje/ebeaninternal/server/core/DiffHelp.java b/src/main/java/com/avaje/ebeaninternal/server/core/DiffHelp.java index d542251ee..a59866716 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/core/DiffHelp.java +++ b/src/main/java/com/avaje/ebeaninternal/server/core/DiffHelp.java @@ -3,7 +3,12 @@ package com.avaje.ebeaninternal.server.core; import com.avaje.ebean.ValuePair; import com.avaje.ebean.bean.EntityBean; import com.avaje.ebeaninternal.server.deploy.BeanDescriptor; +import com.avaje.ebeaninternal.server.deploy.BeanProperty; +import com.avaje.ebeaninternal.server.deploy.BeanPropertyAssocMany; +import com.avaje.ebeaninternal.server.deploy.BeanPropertyAssocOne; +import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.Map; /** @@ -49,4 +54,51 @@ public class DiffHelp { return desc.diff((EntityBean) newBean, (EntityBean) oldBean); } + + /** + * Flattens an existing diff map converting assoc one beans into the associated id changes. + */ + public static Map flatten(Map values, BeanDescriptor desc) { + + Map flattened = null; + + Iterator> iterator = values.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + BeanProperty beanProperty = desc.getBeanProperty(entry.getKey()); + if (beanProperty instanceof BeanPropertyAssocMany) { + // filter out assoc many bean properties + iterator.remove(); + + } else if (beanProperty instanceof BeanPropertyAssocOne) { + BeanPropertyAssocOne assoc = (BeanPropertyAssocOne)beanProperty; + if (!assoc.isEmbedded()) { + // flatten for assoc one beans + if (flattened == null) { + flattened = new LinkedHashMap(); + } + flattenToId(flattened, entry, beanProperty, assoc); + iterator.remove(); + } + } + } + + if (flattened != null) { + values.putAll(flattened); + } + + return values; + } + + private static void flattenToId(Map flattened, Map.Entry entry, BeanProperty beanProperty, BeanPropertyAssocOne assoc) { + + BeanDescriptor oneDesc = assoc.getTargetDescriptor(); + + ValuePair value = entry.getValue(); + Object newId = value.getNewValue() == null ? null : oneDesc.getId((EntityBean)value.getNewValue()); + Object oldId = value.getOldValue() == null ? null : oneDesc.getId((EntityBean)value.getOldValue()); + + String propName = beanProperty.getName() + "." + oneDesc.getIdProperty().getName(); + flattened.put(propName, new ValuePair(newId, oldId)); + } } diff --git a/src/main/java/com/avaje/ebeaninternal/server/core/DiffHelpUpdate.java b/src/main/java/com/avaje/ebeaninternal/server/core/DiffHelpUpdate.java deleted file mode 100644 index 60c5b0e50..000000000 --- a/src/main/java/com/avaje/ebeaninternal/server/core/DiffHelpUpdate.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.avaje.ebeaninternal.server.core; - -import com.avaje.ebean.ValuePair; -import com.avaje.ebean.bean.EntityBean; -import com.avaje.ebeaninternal.server.deploy.BeanDescriptor; -import com.avaje.ebeaninternal.server.deploy.BeanProperty; -import com.avaje.ebeaninternal.server.deploy.BeanPropertyAssocMany; -import com.avaje.ebeaninternal.server.deploy.BeanPropertyAssocOne; - -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.Map; - -/** - * Flattens an existing diff map converting assoc one beans into the associated id changes. - */ -public class DiffHelpUpdate { - - public static Map flatten(Map values, BeanDescriptor desc) { - - Map flattened = null; - - Iterator> iterator = values.entrySet().iterator(); - while (iterator.hasNext()) { - Map.Entry entry = iterator.next(); - BeanProperty beanProperty = desc.getBeanProperty(entry.getKey()); - if (beanProperty instanceof BeanPropertyAssocMany) { - // filter out assoc many bean properties - iterator.remove(); - - } else if (beanProperty instanceof BeanPropertyAssocOne) { - BeanPropertyAssocOne assoc = (BeanPropertyAssocOne)beanProperty; - if (!assoc.isEmbedded()) { - // flatten for assoc one beans - if (flattened == null) { - flattened = new LinkedHashMap(); - } - flattenToId(flattened, entry, beanProperty, assoc); - iterator.remove(); - } - } - } - - if (flattened != null) { - values.putAll(flattened); - } - - return values; - } - - private static void flattenToId(Map flattened, Map.Entry entry, BeanProperty beanProperty, BeanPropertyAssocOne assoc) { - - BeanDescriptor oneDesc = assoc.getTargetDescriptor(); - - ValuePair value = entry.getValue(); - Object newId = value.getNewValue() == null ? null : oneDesc.getId((EntityBean)value.getNewValue()); - Object oldId = value.getOldValue() == null ? null : oneDesc.getId((EntityBean)value.getOldValue()); - - String propName = beanProperty.getName() + "." + oneDesc.getIdProperty().getName(); - flattened.put(propName, new ValuePair(newId, oldId)); - } -} diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptor.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptor.java index 130ac332a..af024e09a 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptor.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptor.java @@ -34,7 +34,7 @@ import com.avaje.ebeaninternal.api.TransactionEventTable.TableIUD; import com.avaje.ebeaninternal.server.cache.CachedBeanData; import com.avaje.ebeaninternal.server.core.CacheOptions; import com.avaje.ebeaninternal.server.core.DefaultSqlUpdate; -import com.avaje.ebeaninternal.server.core.DiffHelpUpdate; +import com.avaje.ebeaninternal.server.core.DiffHelp; import com.avaje.ebeaninternal.server.core.InternString; import com.avaje.ebeaninternal.server.core.PersistRequest; import com.avaje.ebeaninternal.server.core.PersistRequestBean; @@ -2038,7 +2038,7 @@ public class BeanDescriptor implements MetaBeanInfo, SpiBeanType { * Flatten the diff that comes from the entity bean intercept. */ Map diffFlatten(Map diff) { - return DiffHelpUpdate.flatten(diff, this); + return DiffHelp.flatten(diff, this); } /**