package org.tessell.model;
import org.tessell.model.properties.AbstractProperty;
/** A base class for models that wrap a DTO. */
public abstract class AbstractDtoModel<D> extends AbstractModel implements DtoModel<D> {
protected D dto;
/**
* Subclasses should pass in dto to avoid NPEs in any inline assignments of properties they do
* that might want to evaluate the dto, e.g. especially for lambdas.
*/
protected AbstractDtoModel(D dto) {
this.dto = dto;
}
@Override
public void merge(D dto) {
// We treat Model.merge as the equivalent of Property.setInitialValue,
// e.g. we shouldn't mark touched, and we should reset initial values.
AbstractProperty.outstandingSetInitials++;
try {
this.dto = dto;
all.reassessAll();
} finally {
AbstractProperty.outstandingSetInitials--;
}
}
@Override
public D getDto() {
return dto;
}
}