requestPreview();
}
}
private void requestPreview() {
final PushChangesPlan plan = inputParameterSource.getValue();
boolean inputIsNew = dataMonitor.updateInputAndStarted(plan);
if (!inputIsNew) {
return;
}
// Report about our value becoming empty.
updater.reportChanged(this);
UpdatableScript.UpdateCallback callback = new UpdatableScript.UpdateCallback() {
public void failure(final String message, UpdatableScript.Failure failure) {
Optional<Data> result = failure.accept(
new UpdatableScript.Failure.Visitor<Optional<Data>>() {
@Override
public Optional<Data> visitUnspecified() {
return createErrorOptional(
new Message(NLS.bind(Messages.PreviewLoader_FAILED_TO_GET, message),
MessagePriority.WARNING));
}
@Override
public Optional<Data> visitCompileError(final CompileErrorFailure compileError) {
Data data = new Data() {
@Override
public <R> R accept(Visitor<R> visitor) {
return visitor.visitCompileError(compileError);
}
@Override public PushChangesPlan getChangesPlan() {
return plan;
}
};
return createOptional(data);
}
});
done(result);
}
public void success(boolean resumed, Object report,
final UpdatableScript.ChangeDescription changeDescription) {
Optional<Data> result;
if (changeDescription == null) {
result = EMPTY_DATA;
} else {
Data data = new Data() {
@Override public PushChangesPlan getChangesPlan() {
return plan;
}
@Override public <R> R accept(Visitor<R> visitor) {
return visitor.visitSuccess(changeDescription);
}
};
result = createOptional(data);
}
done(result);
}
private void done(Optional<Data> result) {
boolean resultTaken = dataMonitor.updateResult(result, plan);
if (resultTaken) {
updater.reportChanged(PreviewLoader.this);
updater.updateAsync();
}
}
};
plan.execute(true, callback, null);
}