public boolean executeDmlValidationBlock(Operation dml, Element self) throws ValidationException { Element result = null; // Store the old local variables and iterators. Needed because structure // templates need to keep the state across template.execute() calls. LocalVariableMap oldVariables = createLocalVariableMap(null); IteratorMap oldIterators = createIteratorMap(); // Initialize the SELF reference to the local self value. SelfHolder selfHolder = new ReadOnlySelfHolder(self); initializeSelfHolder(selfHolder); try { result = dml.execute(this); } catch (ReturnValueException rve) { result = rve.getElement(); } catch (EvaluationException ee) { File objectFile = (objectTemplate != null) ? objectTemplate.source : null; ValidationException ve = ValidationException.create(MSG_VALIDATION_FAILED_BECAUSE_OF_EXCEPTION); ve.setObjectTemplate(objectFile); ve.initCause(ee); throw ve; } finally { clearSelf(); restoreLocalVariableMap(oldVariables); restoreIteratorMap(oldIterators); } try { BooleanProperty bresult = (BooleanProperty) result; return bresult.getValue().booleanValue(); } catch (ClassCastException cce) { File objectFile = (objectTemplate != null) ? objectTemplate.source : null; ValidationException ve = ValidationException.create( MSG_INVALID_VALIDATION_FUNCTION_RETURN_TYPE, result.getTypeAsString()); throw ve.setObjectTemplate(objectFile); } }