package com.hundsun.ares.studio.ui.page;
import org.eclipse.core.databinding.UpdateValueStrategy;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.core.databinding.validation.ValidationStatus;
import org.eclipse.core.internal.databinding.BindingMessages;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.emf.transaction.RecordingCommand;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
public class TransactionalUpdateValueStrategy extends UpdateValueStrategy {
protected IStatus doSetResult;
protected TransactionalEditingDomain domain;
/**
* @param domain
*/
public TransactionalUpdateValueStrategy(TransactionalEditingDomain domain) {
super();
this.domain = domain;
}
@Override
final protected IStatus doSet(final IObservableValue observableValue,
final Object value) {
doSetResult = Status.OK_STATUS;
RecordingCommand command = new RecordingCommand(domain) {
@Override
protected void doExecute() {
try {
observableValue.setValue(value);
} catch (Exception ex) {
doSetResult = ValidationStatus
.error(
BindingMessages
.getString(BindingMessages.VALUEBINDING_ERROR_WHILE_SETTING_VALUE),
ex);
}
}
};
domain.getCommandStack().execute(command);
return doSetResult;
}
}