// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.debug.ui.actions;
import java.util.List;
import org.chromium.debug.core.ChromiumDebugPlugin;
import org.chromium.debug.core.model.PushChangesPlan;
import org.chromium.debug.core.util.ScriptTargetMapping;
import org.chromium.debug.ui.liveedit.LiveEditResultDialog;
import org.chromium.sdk.UpdatableScript;
import org.chromium.sdk.UpdatableScript.ChangeDescription;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IWorkbenchPart;
/**
* The main action of LiveEdit feature. It gets the current state of a working file and pushes
* it into running V8 VM.
*/
public class PushChangesAction extends V8ScriptAction {
@Override
protected void execute(List<? extends ScriptTargetMapping> filePairList, Shell shell,
IWorkbenchPart workbenchPart) {
for (ScriptTargetMapping pair : filePairList) {
execute(pair, shell);
}
}
private void execute(final ScriptTargetMapping filePair, final Shell shell) {
final PushChangesPlan plan = PushChangesPlan.create(filePair);
UpdatableScript.UpdateCallback callback = new UpdatableScript.UpdateCallback() {
@Override
public void success(Object report, ChangeDescription changeDescription) {
ChromiumDebugPlugin.log(new Status(IStatus.OK, ChromiumDebugPlugin.PLUGIN_ID,
"Script has been successfully updated on remote: " + report)); //$NON-NLS-1$
}
@Override
public void failure(final String message) {
shell.getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
LiveEditResultDialog dialog = new LiveEditResultDialog(shell,
LiveEditResultDialog.createTextInput(message, plan));
dialog.open();
}
});
}
};
plan.execute(false, callback, null);
}
}