1 /*
2  * Copyright (C) 2011 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.ide.eclipse.traceview;
18 
19 import com.android.ide.eclipse.ddms.ITraceviewLauncher;
20 
21 import org.eclipse.core.filesystem.EFS;
22 import org.eclipse.core.filesystem.IFileStore;
23 import org.eclipse.core.resources.ResourcesPlugin;
24 import org.eclipse.core.runtime.IAdaptable;
25 import org.eclipse.core.runtime.Path;
26 import org.eclipse.swt.widgets.Display;
27 import org.eclipse.ui.IWorkbench;
28 import org.eclipse.ui.IWorkbenchPage;
29 import org.eclipse.ui.IWorkbenchWindow;
30 import org.eclipse.ui.PartInitException;
31 import org.eclipse.ui.PlatformUI;
32 import org.eclipse.ui.WorkbenchException;
33 import org.eclipse.ui.ide.IDE;
34 
35 public class TraceviewLauncher implements ITraceviewLauncher {
36 
37     @Override
openFile(String osPath)38     public boolean openFile(String osPath) {
39         final IFileStore fileStore =  EFS.getLocalFileSystem().getStore(new Path(osPath));
40         if (!fileStore.fetchInfo().isDirectory() && fileStore.fetchInfo().exists()) {
41             // before we open the file in an editor window, we make sure the current
42             // workbench page has an editor area (typically the ddms perspective doesn't).
43             final IWorkbench workbench = PlatformUI.getWorkbench();
44             Display display = workbench.getDisplay();
45             final boolean[] result = new boolean[] { false };
46             display.syncExec(new Runnable() {
47                 @Override
48                 public void run() {
49                     IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
50                     IWorkbenchPage page = window.getActivePage();
51                     if (page.isEditorAreaVisible() == false) {
52                         IAdaptable input;
53                         if (page != null)
54                             input= page.getInput();
55                         else
56                             input= ResourcesPlugin.getWorkspace().getRoot();
57                         try {
58                             workbench.showPerspective("org.eclipse.debug.ui.DebugPerspective",
59                                     window, input);
60                         } catch (WorkbenchException e) {
61                         }
62                     }
63 
64                     try {
65                         result[0] = IDE.openEditorOnFileStore(page, fileStore) != null;
66                     } catch (PartInitException e) {
67                         // return false below
68                     }
69                 }
70             });
71 
72             return result[0];
73         }
74 
75         return false;
76     }
77 }
78