Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(232)

Unified Diff: editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/actions/RunInBrowserAction.java

Issue 8801021: added a preference so user can specify browser to open html page (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: '' Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/actions/RunInBrowserAction.java
===================================================================
--- editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/actions/RunInBrowserAction.java (revision 2077)
+++ editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/actions/RunInBrowserAction.java (working copy)
@@ -1,386 +0,0 @@
-/*
- * Copyright (c) 2011, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.dart.tools.ui.actions;
-
-import com.google.dart.compiler.backend.js.JavascriptBackend;
-import com.google.dart.tools.core.DartCore;
-import com.google.dart.tools.core.DartCoreDebug;
-import com.google.dart.tools.core.internal.model.DartLibraryImpl;
-import com.google.dart.tools.core.model.DartElement;
-import com.google.dart.tools.core.model.DartLibrary;
-import com.google.dart.tools.core.model.DartModelException;
-import com.google.dart.tools.core.model.HTMLFile;
-import com.google.dart.tools.ui.DartPluginImages;
-import com.google.dart.tools.ui.DartToolsPlugin;
-import com.google.dart.tools.ui.ImportedDartLibraryContainer;
-import com.google.dart.tools.ui.internal.util.ExceptionHandler;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.viewers.ArrayContentProvider;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IEditorReference;
-import org.eclipse.ui.IEditorRegistry;
-import org.eclipse.ui.IFileEditorInput;
-import org.eclipse.ui.IPartListener;
-import org.eclipse.ui.ISelectionListener;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.dialogs.ListDialog;
-import org.eclipse.ui.model.WorkbenchLabelProvider;
-import org.eclipse.ui.part.FileEditorInput;
-import org.eclipse.ui.progress.UIJob;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-/**
- * A menu for opening html files in the system browser.
- */
-public class RunInBrowserAction extends Action implements ISelectionChangedListener,
- ISelectionListener, IPartListener {
-
- class RunInBrowserJob extends UIJob {
- private IWorkbenchPage page;
- private IFile file;
-
- public RunInBrowserJob(IWorkbenchPage page, IFile file) {
- super(page.getWorkbenchWindow().getShell().getDisplay(),
- ActionMessages.OpenInBrowserAction_jobTitle);
-
- this.page = page;
- this.file = file;
-
- // Synchronize on the workspace root to catch any builds that are in progress.
- setRule(ResourcesPlugin.getWorkspace().getRoot());
-
- // Make sure we display a progress dialog if we do block.
- setUser(true);
- }
-
- @Override
- public IStatus runInUIThread(IProgressMonitor monitor) {
- launchBrowserForHtmlFile(page, file);
-
- return Status.OK_STATUS;
- }
- }
-
- /**
- * The id of this action.
- */
- public static final String ACTION_ID = DartToolsPlugin.PLUGIN_ID + ".runInBrowserAction"; //$NON-NLS-1$
-
- public static File getJsAppArtifactFile(IPath sourceLocation) {
- return sourceLocation.addFileExtension(JavascriptBackend.EXTENSION_APP_JS).toFile();
- }
-
- private IWorkbenchWindow window;
-
- private Object selectedObject;
-
- /**
- * Match both the input and id, so that different types of editor can be opened on the same input.
- */
- private static final int MATCH_BOTH = IWorkbenchPage.MATCH_INPUT | IWorkbenchPage.MATCH_ID;
-
- public RunInBrowserAction(IWorkbenchWindow window) {
- this.window = window;
-
- setText(ActionMessages.OpenInBrowserAction_title);
- setId(ACTION_ID);
- setDescription(ActionMessages.OpenInBrowserAction_description);
- setToolTipText(ActionMessages.OpenInBrowserAction_toolTip);
- if (DartCoreDebug.BLEEDING_EDGE) {
- setImageDescriptor(DartToolsPlugin.getImageDescriptor("icons/full/dart16/run_client.png"));
- } else {
- setImageDescriptor(DartPluginImages.DESC_TOOL_RUN);
- }
- setEnabled(false);
-
- window.getPartService().addPartListener(this);
- window.getSelectionService().addSelectionListener(this);
- }
-
- @Override
- public void partActivated(IWorkbenchPart part) {
- if (part instanceof IEditorPart) {
- handleEditorActivated((IEditorPart) part);
- }
- }
-
- @Override
- public void partBroughtToTop(IWorkbenchPart part) {
-
- }
-
- @Override
- public void partClosed(IWorkbenchPart part) {
-
- }
-
- @Override
- public void partDeactivated(IWorkbenchPart part) {
-
- }
-
- @Override
- public void partOpened(IWorkbenchPart part) {
-
- }
-
- @Override
- public void run() {
- openInBrowser(window.getActivePage());
- }
-
- @Override
- public void selectionChanged(IWorkbenchPart part, ISelection selection) {
- if (selection instanceof IStructuredSelection) {
- handleSelectionChanged((IStructuredSelection) selection);
- }
- }
-
- @Override
- public void selectionChanged(SelectionChangedEvent event) {
- if (event.getSelection() instanceof IStructuredSelection) {
- handleSelectionChanged((IStructuredSelection) event.getSelection());
- }
- }
-
- void launchBrowserForHtmlFile(IWorkbenchPage page, IFile file) {
- DartElement element = DartCore.create(file);
-
- if (element == null) {
- MessageDialog.openError(window.getShell(), ActionMessages.OpenInBrowserAction_unableToLaunch,
- ActionMessages.OpenInBrowserAction_notInDartLib);
- } else if (!(element instanceof HTMLFile)) {
- MessageDialog.openError(window.getShell(), ActionMessages.OpenInBrowserAction_unableToLaunch,
- ActionMessages.OpenInBrowserAction_notAnHtmlFile);
- } else {
- // check that the js output file exists
- HTMLFile htmlFile = (HTMLFile) element;
-
- try {
- if (htmlFile.getReferencedLibraries().length > 0) {
- DartLibrary library = htmlFile.getReferencedLibraries()[0];
- File jsOutFile = getJsAppArtifactFile(library.getCorrespondingResource().getLocation());
-
- if (jsOutFile.exists()) {
- try {
- String editorId = IEditorRegistry.SYSTEM_EXTERNAL_EDITOR_ID;
- page.openEditor(new FileEditorInput(file), editorId, true, MATCH_BOTH);
- } catch (PartInitException e) {
- ExceptionHandler.handle(e, window.getShell(),
- ActionMessages.OpenInBrowserAction_title,
- ActionMessages.OpenInBrowserAction_couldNotOpenFile);
- }
- } else {
- MessageDialog.openError(
- window.getShell(),
- ActionMessages.OpenInBrowserAction_unableToLaunch,
- NLS.bind(ActionMessages.OpenInBrowserAction_noJSFile, file.getName(),
- library.getDisplayName()));
- }
- }
- } catch (DartModelException ex) {
- ExceptionHandler.handle(ex, window.getShell(), ActionMessages.OpenInBrowserAction_title,
- ActionMessages.OpenInBrowserAction_couldNotOpenFile);
- }
- }
- }
-
- void openInBrowser(IWorkbenchPage page) {
- try {
- List<IFile> files = getFileResourcesForSelection();
-
- IFile file = null;
-
- if (files.size() == 0) {
- MessageDialog.openError(window.getShell(), ActionMessages.OpenInBrowserAction_noFileTitle,
- ActionMessages.OpenInBrowserAction_noFileMessage);
- } else if (files.size() == 1) {
- file = files.get(0);
- } else {
- file = chooseHtmlFile(files);
- }
-
- if (file != null) {
- boolean isSaveNeeded = isSaveAllNeeded(page);
-
- if (isSaveNeeded) {
- if (!saveDirtyEditors(page)) {
- // The user cancelled the launch.
- return;
- }
- }
-
- RunInBrowserJob job = new RunInBrowserJob(page, file);
-
- // If we saved any files, delay for a bit to allow the builder to fire off a build.
- // Once the builder starts, we will automatically wait for it to complete before launching.
- job.schedule(isSaveNeeded ? 100 : 0);
- }
- } catch (DartModelException e) {
- ExceptionHandler.handle(e, window.getShell(), ActionMessages.OpenInBrowserAction_title,
- ActionMessages.OpenInBrowserAction_couldNotOpenFile);
- }
- }
-
- private IFile chooseHtmlFile(List<IFile> htmlFiles) {
- ListDialog dialog = new ListDialog(window.getShell());
-
- dialog.setTitle(ActionMessages.OpenInBrowserAction_selectFileTitle);
- dialog.setMessage(ActionMessages.OpenInBrowserAction_selectFileMessage);
- dialog.setLabelProvider(new WorkbenchLabelProvider());
- dialog.setContentProvider(new ArrayContentProvider());
- dialog.setInput(htmlFiles);
-
- dialog.open();
-
- Object[] result = dialog.getResult();
-
- if (result == null || result.length == 0) {
- return null;
- }
-
- return (IFile) result[0];
- }
-
- private List<IFile> getFileResourcesForSelection() throws DartModelException {
- IResource resource = null;
- DartElement element = null;
-
- if (selectedObject == null) {
- return Collections.emptyList();
- }
-
- if (selectedObject instanceof IResource) {
- resource = (IResource) selectedObject;
- }
-
- if (resource != null) {
- // html file
- if (isHtmlFile(resource)) {
- return Collections.singletonList((IFile) resource);
- }
-
- // other resource
- element = DartCore.create(resource);
- }
-
- if (selectedObject instanceof DartElement) {
- element = (DartElement) selectedObject;
- }
-
- // HTMLFile
- if (element instanceof HTMLFile) {
- HTMLFile htmlFile = (HTMLFile) element;
-
- return Collections.singletonList((IFile) htmlFile.getCorrespondingResource());
- }
-
- if (selectedObject instanceof ImportedDartLibraryContainer) {
- element = ((ImportedDartLibraryContainer) selectedObject).getDartLibrary();
- }
-
- if (element == null) {
- return Collections.emptyList();
- } else {
- // DartElement in a library
- DartLibrary library = element.getAncestor(DartLibrary.class);
-
- if (library != null) {
- List<IFile> htmlFiles = getHtmlFilesFor(library);
-
- if (htmlFiles.size() > 0) {
- return htmlFiles;
- }
- }
-
- return Collections.emptyList();
- }
- }
-
- private List<IFile> getHtmlFilesFor(DartLibrary library) throws DartModelException {
- Set<IFile> files = new HashSet<IFile>();
-
- for (HTMLFile file : ((DartLibraryImpl) library).getChildrenOfType(HTMLFile.class)) {
- files.add((IFile) file.getUnderlyingResource());
- }
-
- return new ArrayList<IFile>(files);
- }
-
- private void handleEditorActivated(IEditorPart editorPart) {
- if (editorPart.getEditorInput() instanceof IFileEditorInput) {
- IFileEditorInput input = (IFileEditorInput) editorPart.getEditorInput();
-
- handleSelectionChanged(new StructuredSelection(input.getFile()));
- }
- }
-
- private void handleSelectionChanged(IStructuredSelection selection) {
- if (selection != null && !selection.isEmpty()) {
- selectedObject = selection.getFirstElement();
- } else {
- selectedObject = null;
- }
-
- try {
- setEnabled(getFileResourcesForSelection().size() > 0);
- } catch (DartModelException e) {
- setEnabled(false);
- }
- }
-
- private boolean isHtmlFile(IResource resource) {
- return resource instanceof IFile && resource.getName().endsWith(".html");
- }
-
- private boolean isSaveAllNeeded(IWorkbenchPage page) {
- IEditorReference[] editors = page.getEditorReferences();
- for (int i = 0; i < editors.length; i++) {
- IEditorReference ed = editors[i];
- if (ed.isDirty()) {
- return true;
- }
- }
- return false;
- }
-
- private boolean saveDirtyEditors(IWorkbenchPage page) {
- return page.saveAllEditors(false);
- }
-
-}

Powered by Google App Engine
This is Rietveld 408576698