From 11de7015c2f3e17e87bf240912c28ca9f5bd7dd6 Mon Sep 17 00:00:00 2001 From: Greg Burd Date: Thu, 25 Jan 2018 11:26:12 -0500 Subject: [PATCH] Change mutate on drafts to be a bit faster. --- .../net/helenus/core/AbstractEntityDraft.java | 33 ++++++++----------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/src/main/java/net/helenus/core/AbstractEntityDraft.java b/src/main/java/net/helenus/core/AbstractEntityDraft.java index 259f103..dd2bfab 100644 --- a/src/main/java/net/helenus/core/AbstractEntityDraft.java +++ b/src/main/java/net/helenus/core/AbstractEntityDraft.java @@ -107,27 +107,23 @@ public abstract class AbstractEntityDraft implements Drafted { return (T) mutate(this.methodNameFor(getter), value); } - public Object mutate(String key, Object value) { + public T mutate(String key, T value) { Objects.requireNonNull(key); - if (value == null) { - return null; - } - - if (entity != null) { - Map map = entity.toMap(); - - if (map.containsKey(key) && !value.equals(map.get(key))) { - backingMap.put(key, value); - return value; - } - - return map.get(key); - } else { - backingMap.put(key, value); - - return null; + if (value != null) { + if (entity != null) { + if (entityMap.containsKey(key)) { + T currentValue = this.fetch(key); + if (currentValue != null && !value.equals(currentValue)) { + backingMap.put(key, value); + return value; + } + } + } else { + backingMap.put(key, value); + } } + return null; } private String methodNameFor(Getter getter) { @@ -153,7 +149,6 @@ public abstract class AbstractEntityDraft implements Drafted { private T fetch(String key) { T value = (T) backingMap.get(key); - if (value == null) { value = (T) entityMap.get(key); }