Modified: 1216132 - Error when debugging eval()'d code
[phpeclipse.git] / net.sourceforge.phpeclipse.xdebug.ui / src / net / sourceforge / phpeclipse / xdebug / ui / XDebugUIPlugin.java
1 package net.sourceforge.phpeclipse.xdebug.ui;
2
3 import java.util.MissingResourceException;
4 import java.util.ResourceBundle;
5
6 import org.eclipse.core.runtime.CoreException;
7 import org.eclipse.core.runtime.IStatus;
8 import org.eclipse.core.runtime.Status;
9 import org.eclipse.jface.dialogs.ErrorDialog;
10 import org.eclipse.jface.resource.ImageDescriptor;
11 import org.eclipse.swt.widgets.Display;
12 import org.eclipse.swt.widgets.Shell;
13 import org.eclipse.ui.plugin.AbstractUIPlugin;
14 import org.osgi.framework.BundleContext;
15
16 /**
17  * The main plugin class to be used in the desktop.
18  */
19 public class XDebugUIPlugin extends AbstractUIPlugin {
20
21         private static final String BUNDLE_NAME = "net.sourceforge.phpeclipse.xdebug.ui.XDebugUIMessages"; //$NON-NLS-1$
22
23         private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
24                         .getBundle(BUNDLE_NAME);
25
26         private static final String PLUGIN_ID = "net.sourceforge.phpeclipse.xdebug.ui";
27
28         // The shared instance.
29         private static XDebugUIPlugin plugin;
30
31         /**
32          * The constructor.
33          */
34         public XDebugUIPlugin() {
35                 plugin = this;
36         }
37
38         /**
39          * This method is called upon plug-in activation
40          */
41         public void start(BundleContext context) throws Exception {
42                 super.start(context);
43         }
44
45         /**
46          * This method is called when the plug-in is stopped
47          */
48         public void stop(BundleContext context) throws Exception {
49                 super.stop(context);
50                 plugin = null;
51         }
52
53         /**
54          * Returns the shared instance.
55          */
56         public static XDebugUIPlugin getDefault() {
57                 return plugin;
58         }
59
60         /**
61          * Returns an image descriptor for the image file at the given plug-in
62          * relative path.
63          * 
64          * @param path
65          *            the path
66          * @return the image descriptor
67          */
68         public static ImageDescriptor getImageDescriptor(String path) {
69                 return AbstractUIPlugin.imageDescriptorFromPlugin(
70                                 "net.sourceforge.phpeclipse.xdebug.ui", path);
71         }
72
73         /**
74          * Convenience method which returns the unique identifier of this plugin.
75          */
76         public static String getUniqueIdentifier() {
77                 return PLUGIN_ID;
78         }
79
80         /**
81          * Utility method with conventions
82          */
83         public static void errorDialog(Shell shell, String title, String message,
84                         IStatus s) {
85                 // if the 'message' resource string and the IStatus' message are the
86                 // same,
87                 // don't show both in the dialog
88                 if (s != null && message.equals(s.getMessage())) {
89                         message = null;
90                 }
91                 ErrorDialog.openError(shell, title, message, s);
92         }
93
94         /**
95          * Utility method with conventions
96          */
97         public static void errorDialog(Shell shell, String title, String message,
98                         Throwable t) {
99                 IStatus status;
100                 if (t instanceof CoreException) {
101                         status = ((CoreException) t).getStatus();
102                         // if the 'message' resource string and the IStatus' message are the
103                         // same,
104                         // don't show both in the dialog
105                         if (status != null && message.equals(status.getMessage())) {
106                                 message = null;
107                         }
108                 } else {
109                         status = new Status(IStatus.ERROR, getUniqueIdentifier(),
110                                         IStatus.ERROR, "Error within Debug UI: ", t); //$NON-NLS-1$
111                         log(status);
112                 }
113                 ErrorDialog.openError(shell, title, message, status);
114         }
115
116         /**
117          * Logs the specified status with this plug-in's log.
118          * 
119          * @param status
120          *            status to log
121          */
122         public static void log(IStatus status) {
123                 getDefault().getLog().log(status);
124         }
125
126         /**
127          * Logs an internal error with the specified throwable
128          * 
129          * @param e
130          *            the exception to be logged
131          */
132         public static void log(Throwable e) {
133                 log(new Status(IStatus.ERROR, getUniqueIdentifier(), IStatus.ERROR,
134                                 "Internal Error", e));
135         }
136
137         /**
138          * Returns the standard display to be used. The method first checks, if the
139          * thread calling this method has an associated display. If so, this display
140          * is returned. Otherwise the method returns the default display.
141          */
142         public static Display getStandardDisplay() {
143                 Display display;
144                 display = Display.getCurrent();
145                 if (display == null)
146                         display = Display.getDefault();
147                 return display;
148         }
149
150         public static String getString(String key) {
151                 try {
152                         return RESOURCE_BUNDLE.getString(key);
153                 } catch (MissingResourceException e) {
154                         return '!' + key + '!';
155                 }
156         }
157
158 }