Change mutate on drafts to be a bit faster.

This commit is contained in:
Greg Burd 2018-01-25 11:26:12 -05:00
parent f9b1563bdd
commit 11de7015c2

View file

@ -107,27 +107,23 @@ public abstract class AbstractEntityDraft<E> implements Drafted<E> {
return (T) mutate(this.<T>methodNameFor(getter), value);
}
public Object mutate(String key, Object value) {
public <T> T mutate(String key, T value) {
Objects.requireNonNull(key);
if (value == null) {
return null;
}
if (entity != null) {
Map<String, Object> 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.<T>fetch(key);
if (currentValue != null && !value.equals(currentValue)) {
backingMap.put(key, value);
return value;
}
}
} else {
backingMap.put(key, value);
}
}
return null;
}
private <T> String methodNameFor(Getter<T> getter) {
@ -153,7 +149,6 @@ public abstract class AbstractEntityDraft<E> implements Drafted<E> {
private <T> T fetch(String key) {
T value = (T) backingMap.get(key);
if (value == null) {
value = (T) entityMap.get(key);
}