// 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.util.ChromiumDebugPluginUtil; import org.chromium.debug.core.util.ScriptTargetMapping; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.ide.IDE; /** * A base class for all LiveEdit actions that are scoped to a working file from user workspace. * It makes all necessary checks and prepares data in form of {@link ScriptTargetMapping} class. * The concrete actions implement the {@link #execute(List, Shell)} method. */ public abstract class V8ScriptAction extends FileBasedAction.Single<IFile> { public V8ScriptAction() { super(false, JS_FILE_NAME_FILTER); } @Override protected ActionRunnable createRunnable(final IFile file) { return new ActionRunnable() { public void adjustAction() { } public void run(Shell shell, IWorkbenchPart workbenchPart) { boolean saved = IDE.saveAllEditors(new IResource[] { file }, true); if (!saved) { return; } List<? extends ScriptTargetMapping> filePairList = ChromiumDebugPlugin.getScriptTargetMapping(file); execute(filePairList, shell, workbenchPart); } }; } protected abstract void execute(List<? extends ScriptTargetMapping> filePairList, Shell shell, IWorkbenchPart workbenchPart); static final FileBasedAction.FileFilter<IFile> JS_FILE_NAME_FILTER = new FileBasedAction.FileFilter<IFile>() { @Override IFile accept(IFile file) { if (filterFileName(file.getName())) { return file; } else { return null; } } /** * @return true if action should be enabled for this file name */ private boolean filterFileName(String name) { for (String suffix : ChromiumDebugPluginUtil.SUPPORTED_EXTENSIONS_SUFFIX_LIST) { if (name.endsWith(suffix)) { return true; } } return false; } }; }