rcp: Move plugins to their own sub-directory
[deliverable/tracecompass.git] / rcp / org.eclipse.tracecompass.rcp.ui / src / org / eclipse / tracecompass / internal / tracing / rcp / ui / ApplicationWorkbenchAdvisor.java
1 /**********************************************************************
2 * Copyright (c) 2013, 2014 Ericsson
3 *
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
8 *
9 * Contributors:
10 * Bernd Hufmann - Initial API and implementation
11 **********************************************************************/
12 package org.eclipse.tracecompass.internal.tracing.rcp.ui;
13
14 import java.lang.reflect.InvocationTargetException;
15 import java.net.URL;
16
17 import org.eclipse.core.resources.IWorkspace;
18 import org.eclipse.core.resources.ResourcesPlugin;
19 import org.eclipse.core.runtime.CoreException;
20 import org.eclipse.core.runtime.FileLocator;
21 import org.eclipse.core.runtime.IAdaptable;
22 import org.eclipse.core.runtime.IProgressMonitor;
23 import org.eclipse.core.runtime.IStatus;
24 import org.eclipse.core.runtime.MultiStatus;
25 import org.eclipse.core.runtime.Path;
26 import org.eclipse.core.runtime.Platform;
27 import org.eclipse.core.runtime.Status;
28 import org.eclipse.jface.dialogs.ErrorDialog;
29 import org.eclipse.jface.dialogs.ProgressMonitorDialog;
30 import org.eclipse.jface.operation.IRunnableWithProgress;
31 import org.eclipse.jface.resource.ImageDescriptor;
32 import org.eclipse.tracecompass.internal.tracing.rcp.ui.messages.Messages;
33 import org.eclipse.ui.application.IWorkbenchConfigurer;
34 import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
35 import org.eclipse.ui.application.WorkbenchAdvisor;
36 import org.eclipse.ui.application.WorkbenchWindowAdvisor;
37 import org.eclipse.ui.ide.IDE;
38 import org.eclipse.ui.internal.ide.IDEInternalWorkbenchImages;
39 import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
40 import org.osgi.framework.Bundle;
41
42
43 /**
44 * WorkbenchAdvisor implementation of the LTTng RCP.
45 *
46 * @author Bernd Hufmann
47 */
48 @SuppressWarnings("restriction")
49 public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor {
50
51 // ------------------------------------------------------------------------
52 // Constants
53 // ------------------------------------------------------------------------
54 // The default perspective
55 private static final String PERSPECTIVE_ID = "org.eclipse.linuxtools.tmf.ui.perspective"; //$NON-NLS-1$
56
57 private static final String ICONS_PATH = "$nl$/icons/full/"; //$NON-NLS-1$
58 private static final String PATH_ELOCALTOOL = ICONS_PATH + "elcl16/"; //$NON-NLS-1$
59 private static final String PATH_DLOCALTOOL = ICONS_PATH + "dlcl16/"; //$NON-NLS-1$
60 private static final String PATH_ETOOL = ICONS_PATH + "etool16/"; //$NON-NLS-1$
61 private static final String PATH_DTOOL = ICONS_PATH + "dtool16/"; //$NON-NLS-1$
62 private static final String PATH_OBJECT = ICONS_PATH + "obj16/"; //$NON-NLS-1$
63 private static final String PATH_WIZBAN = ICONS_PATH + "wizban/";//$NON-NLS-1$
64
65 // ------------------------------------------------------------------------
66 // Operations
67 // ------------------------------------------------------------------------
68 @Override
69 public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
70 return new ApplicationWorkbenchWindowAdvisor(configurer);
71 }
72
73 @Override
74 public void initialize(IWorkbenchConfigurer configurer) {
75 configurer.setSaveAndRestore(true);
76 declareWorkbenchImages();
77 }
78
79 @Override
80 public String getInitialWindowPerspectiveId() {
81 return PERSPECTIVE_ID;
82 }
83
84 @Override
85 public IAdaptable getDefaultPageInput() {
86 IWorkspace workspace = ResourcesPlugin.getWorkspace();
87 return workspace.getRoot();
88 }
89
90 @Override
91 public void preStartup() {
92 IDE.registerAdapters();
93 }
94
95 @Override
96 public void postShutdown() {
97 // Save workspace
98 final MultiStatus status = new MultiStatus(TracingRcpPlugin.PLUGIN_ID, 1, Messages.Application_WorkspaceSavingError, null);
99 try {
100 IRunnableWithProgress runnable = new IRunnableWithProgress() {
101 @Override
102 public void run(IProgressMonitor monitor) {
103 try {
104 IWorkspace ws = ResourcesPlugin.getWorkspace();
105 status.merge(ws.save(true, monitor));
106 } catch (CoreException e) {
107 status.merge(e.getStatus());
108 }
109 }
110 };
111 new ProgressMonitorDialog(null).run(true, true, runnable);
112 } catch (InvocationTargetException e) {
113 status.merge(new Status(IStatus.ERROR, TracingRcpPlugin.PLUGIN_ID, Messages.Application_InternalError, e.getTargetException()));
114 } catch (InterruptedException e) {
115 status.merge(Status.CANCEL_STATUS);
116 }
117 if (!status.isOK()) {
118 ErrorDialog.openError(null, Messages.Application_WorkspaceSavingError, null, status, IStatus.ERROR | IStatus.WARNING);
119 TracingRcpPlugin.getDefault().getLog().log(status);
120 }
121 }
122
123 // ------------------------------------------------------------------------
124 // Helper methods
125 // ------------------------------------------------------------------------
126 private void declareWorkbenchImages() {
127
128 Bundle ideBundle = Platform.getBundle(IDEWorkbenchPlugin.IDE_WORKBENCH);
129
130 declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_ETOOL_BUILD_EXEC,
131 PATH_ETOOL + "build_exec.gif", false); //$NON-NLS-1$
132 declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_ETOOL_BUILD_EXEC_HOVER,
133 PATH_ETOOL + "build_exec.gif", false); //$NON-NLS-1$
134 declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_ETOOL_BUILD_EXEC_DISABLED,
135 PATH_DTOOL + "build_exec.gif", false); //$NON-NLS-1$
136
137 declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_ETOOL_SEARCH_SRC,
138 PATH_ETOOL + "search_src.gif", false); //$NON-NLS-1$
139 declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_ETOOL_SEARCH_SRC_HOVER,
140 PATH_ETOOL + "search_src.gif", false); //$NON-NLS-1$
141 declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_ETOOL_SEARCH_SRC_DISABLED,
142 PATH_DTOOL + "search_src.gif", false); //$NON-NLS-1$
143
144 declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_ETOOL_NEXT_NAV, PATH_ETOOL
145 + "next_nav.gif", false); //$NON-NLS-1$
146
147 declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_ETOOL_PREVIOUS_NAV,
148 PATH_ETOOL + "prev_nav.gif", false); //$NON-NLS-1$
149
150 declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_WIZBAN_NEWPRJ_WIZ,
151 PATH_WIZBAN + "newprj_wiz.png", false); //$NON-NLS-1$
152 declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_WIZBAN_NEWFOLDER_WIZ,
153 PATH_WIZBAN + "newfolder_wiz.png", false); //$NON-NLS-1$
154 declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_WIZBAN_NEWFILE_WIZ,
155 PATH_WIZBAN + "newfile_wiz.png", false); //$NON-NLS-1$
156
157 declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_WIZBAN_IMPORTDIR_WIZ,
158 PATH_WIZBAN + "importdir_wiz.png", false); //$NON-NLS-1$
159 declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_WIZBAN_IMPORTZIP_WIZ,
160 PATH_WIZBAN + "importzip_wiz.png", false); //$NON-NLS-1$
161
162 declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_WIZBAN_EXPORTDIR_WIZ,
163 PATH_WIZBAN + "exportdir_wiz.png", false); //$NON-NLS-1$
164 declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_WIZBAN_EXPORTZIP_WIZ,
165 PATH_WIZBAN + "exportzip_wiz.png", false); //$NON-NLS-1$
166
167 declareWorkbenchImage(ideBundle,
168 IDEInternalWorkbenchImages.IMG_WIZBAN_RESOURCEWORKINGSET_WIZ, PATH_WIZBAN
169 + "workset_wiz.png", false); //$NON-NLS-1$
170
171 declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_DLGBAN_SAVEAS_DLG,
172 PATH_WIZBAN + "saveas_wiz.png", false); //$NON-NLS-1$
173
174 declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_DLGBAN_QUICKFIX_DLG,
175 PATH_WIZBAN + "quick_fix.png", false); //$NON-NLS-1$
176
177 declareWorkbenchImage(ideBundle, IDE.SharedImages.IMG_OBJ_PROJECT, PATH_OBJECT
178 + "prj_obj.gif", true); //$NON-NLS-1$
179 declareWorkbenchImage(ideBundle, IDE.SharedImages.IMG_OBJ_PROJECT_CLOSED, PATH_OBJECT
180 + "cprj_obj.gif", true); //$NON-NLS-1$
181 declareWorkbenchImage(ideBundle, IDE.SharedImages.IMG_OPEN_MARKER, PATH_ELOCALTOOL
182 + "gotoobj_tsk.gif", true); //$NON-NLS-1$
183
184 declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_ELCL_QUICK_FIX_ENABLED,
185 PATH_ELOCALTOOL + "smartmode_co.gif", true); //$NON-NLS-1$
186
187 declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_DLCL_QUICK_FIX_DISABLED,
188 PATH_DLOCALTOOL + "smartmode_co.gif", true); //$NON-NLS-1$
189
190 declareWorkbenchImage(ideBundle, IDE.SharedImages.IMG_OBJS_TASK_TSK, PATH_OBJECT
191 + "taskmrk_tsk.gif", true); //$NON-NLS-1$
192 declareWorkbenchImage(ideBundle, IDE.SharedImages.IMG_OBJS_BKMRK_TSK, PATH_OBJECT
193 + "bkmrk_tsk.gif", true); //$NON-NLS-1$
194
195 declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_OBJS_COMPLETE_TSK,
196 PATH_OBJECT + "complete_tsk.gif", true); //$NON-NLS-1$
197 declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_OBJS_INCOMPLETE_TSK,
198 PATH_OBJECT + "incomplete_tsk.gif", true); //$NON-NLS-1$
199 declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_OBJS_WELCOME_ITEM,
200 PATH_OBJECT + "welcome_item.gif", true); //$NON-NLS-1$
201 declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_OBJS_WELCOME_BANNER,
202 PATH_OBJECT + "welcome_banner.gif", true); //$NON-NLS-1$
203 declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_OBJS_ERROR_PATH,
204 PATH_OBJECT + "error_tsk.gif", true); //$NON-NLS-1$
205 declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_OBJS_WARNING_PATH,
206 PATH_OBJECT + "warn_tsk.gif", true); //$NON-NLS-1$
207 declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_OBJS_INFO_PATH, PATH_OBJECT
208 + "info_tsk.gif", true); //$NON-NLS-1$
209
210 declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_LCL_FLAT_LAYOUT,
211 PATH_ELOCALTOOL + "flatLayout.gif", true); //$NON-NLS-1$
212 declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_LCL_HIERARCHICAL_LAYOUT,
213 PATH_ELOCALTOOL + "hierarchicalLayout.gif", true); //$NON-NLS-1$
214 declareWorkbenchImage(ideBundle, IDEInternalWorkbenchImages.IMG_ETOOL_PROBLEM_CATEGORY,
215 PATH_ETOOL + "problem_category.gif", true); //$NON-NLS-1$
216 }
217
218 /**
219 * Declares an IDE-specific workbench image.
220 *
221 * Declares all IDE-specific workbench images. This includes both "shared"
222 * images (named in ( @link IDE.SharedImages} ) and internal images (named in
223 * {@link org.eclipse.ui.internal.ide.IDEInternalWorkbenchImages}).
224 *
225 * @param symbolicName
226 * the symbolic name of the image
227 * @param path
228 * the path of the image file; this path is relative to the base
229 * of the IDE plug-in
230 * @param shared
231 * <code>true</code> if this is a shared image, and
232 * <code>false</code> if this is not a shared image
233 */
234 private void declareWorkbenchImage(Bundle ideBundle, String symbolicName, String path, boolean shared) {
235 URL url = FileLocator.find(ideBundle, new Path(path), null);
236 ImageDescriptor desc = ImageDescriptor.createFromURL(url);
237 getWorkbenchConfigurer().declareImage(symbolicName, desc, shared);
238 }
239 }
This page took 0.036645 seconds and 5 git commands to generate.