package de.flower.common.ui.model;
import de.flower.common.model.db.entity.IEntity;
import org.apache.wicket.model.IModel;
import java.io.Serializable;
/**
* Model stores last value that was set. Helps to deal with detachable models when it is necessary
* to access previously submitted values.
*
* @author flowerrrr
*/
public class StateSavingModel<T extends Serializable> extends AbstractChainingModel<T, T> {
private T savedObject;
private Long savedEntityId;
public StateSavingModel(final IModel<T> wrappedModel) {
super(wrappedModel);
}
@Override
public T getObject() {
T object = getChainedModelObject();
if (savedObject == null && savedEntityId == null) {
// init the saved values once.
updateCachedValue(object);
}
return object;
}
private void updateCachedValue(final T object) {
if (object != null) {
if (object instanceof IEntity) {
savedEntityId = ((IEntity) object).getId();
} else {
savedObject = object;
}
} else {
savedEntityId = null;
savedObject = null;
}
}
@Override
public void setObject(final T object) {
getChainedModel().setObject(object);
updateCachedValue(object);
}
public T getSavedObject() {
return savedObject;
}
public Long getSavedEntityId() {
return savedEntityId;
}
}