private void applyAlterationImpl(final Object moveobj, final String tail,
final DataAlterationRequest dar, final DAREnvironment darenv) {
final PropertyAccessor pa = MethodAnalyser.getPropertyAccessor(moveobj,
mappingcontext);
BeanInvalidationBracketer bib = darenv == null || darenv.bib == null ? NullBeanInvalidationBracketer.instance
: darenv.bib;
bib.invalidate(dar.path, new Runnable() {
public void run() {
Object convert = dar.data;
if (convert == DataAlterationRequest.INAPPLICABLE_VALUE)
return;
while (convert instanceof ObjectFactory) {
convert = ((ObjectFactory) convert).getObject();
}
Class leaftype = pa.getPropertyType(moveobj, tail);
DARApplyEnvironment daraenv = new DARApplyEnvironment(dar, darenv, moveobj,
convert, tail, pa, leaftype);
if (dar.type.equals(DataAlterationRequest.ADD)) {
impl.processAddition(daraenv);
}
else if (dar.type.equals(DataAlterationRequest.DELETE)) {
impl.processDeletion(daraenv);
}
}
});
}