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); }