package net.t7seven7t.craftfx.data; import java.util.Optional; /** * */ public abstract class AbstractData implements Data { private Optional<DataHolder> holder = Optional.empty(); @Override public <T> Optional<T> get(String propertyName, Class<T> clazz) { return holder.map(h -> h.get(propertyName, clazz)).orElse(Optional.empty()); } @Override public <T> T get(String propertyName, Class<T> clazz, T def) { return get(propertyName, clazz).orElse(def); } public Optional<DataHolder> getHolder() { return holder; } @Override public final void setHolder(DataHolder holder) { this.holder = Optional.ofNullable(holder); if (holder != null) onDataHolderUpdate(); } @Override public Data copy() { Data data = getCopy(); data.setHolder(holder.orElse(null)); return data; } /** * Called when the setDataHolder is called with a holder that is non null so that child * instances have a chance to reinitialize their internal state. */ public void onDataHolderUpdate() { } public abstract Data getCopy(); }