--- /dev/null
+package org.argeo.slc.ide.ui;\r
+\r
+import java.net.URL;\r
+\r
+import org.eclipse.core.resources.IResource;\r
+import org.eclipse.core.runtime.CoreException;\r
+import org.eclipse.debug.core.DebugEvent;\r
+import org.eclipse.debug.core.DebugPlugin;\r
+import org.eclipse.debug.core.IDebugEventSetListener;\r
+import org.eclipse.debug.core.ILaunch;\r
+import org.eclipse.debug.core.model.IProcess;\r
+import org.eclipse.jface.resource.ImageDescriptor;\r
+import org.eclipse.jface.resource.ImageRegistry;\r
+import org.eclipse.pde.core.plugin.TargetPlatform;\r
+import org.eclipse.swt.graphics.Image;\r
+import org.eclipse.ui.plugin.AbstractUIPlugin;\r
+import org.osgi.framework.BundleContext;\r
+\r
+/**\r
+ * The activator class controls the plug-in life cycle\r
+ */\r
+public class SlcIdeUiPlugin extends AbstractUIPlugin {\r
+\r
+ // The plug-in ID\r
+ public static final String ID = "org.argeo.slc.ide.ui";\r
+\r
+ // The shared instance\r
+ private static SlcIdeUiPlugin plugin;\r
+\r
+ /**\r
+ * The constructor\r
+ */\r
+ public SlcIdeUiPlugin() {\r
+ }\r
+\r
+ @Override\r
+ public void start(BundleContext context) throws Exception {\r
+ super.start(context);\r
+ plugin = this;\r
+ DebugPlugin.getDefault()\r
+ .addDebugEventListener(new DebugEventListener());\r
+\r
+ String location = TargetPlatform.getLocation();\r
+ System.out.println(location);\r
+ }\r
+\r
+ @Override\r
+ public void stop(BundleContext context) throws Exception {\r
+ plugin = null;\r
+ super.stop(context);\r
+ }\r
+\r
+ /**\r
+ * Returns the shared instance\r
+ * \r
+ * @return the shared instance\r
+ */\r
+ public static SlcIdeUiPlugin getDefault() {\r
+ return plugin;\r
+ }\r
+\r
+ public Image getImage(String relativeURL) {\r
+ ImageRegistry imageRegistry = getImageRegistry();\r
+ Image image = imageRegistry.get(relativeURL);\r
+ if (image == null) {\r
+ URL imageURL = getBundle().getEntry(relativeURL);\r
+ ImageDescriptor descriptor = ImageDescriptor\r
+ .createFromURL(imageURL);\r
+ image = descriptor.createImage();\r
+ imageRegistry.put(relativeURL, image);\r
+ }\r
+ return image;\r
+ }\r
+\r
+ protected static class DebugEventListener implements IDebugEventSetListener {\r
+ public void handleDebugEvents(DebugEvent[] events) {\r
+ if (events == null)\r
+ return;\r
+\r
+ for (int i = 0; i < events.length; i++) {\r
+ DebugEvent event = events[i];\r
+ if (event == null)\r
+ continue;\r
+ Object source = event.getSource();\r
+ if (source instanceof IProcess\r
+ && event.getKind() == DebugEvent.TERMINATE) {\r
+ IProcess process = (IProcess) source;\r
+// if (process == null)\r
+// continue;\r
+ ILaunch launch = process.getLaunch();\r
+ if (launch != null)\r
+ refreshOsgiBootLaunch(launch);\r
+ }\r
+ }\r
+ }\r
+\r
+ protected void refreshOsgiBootLaunch(ILaunch launch) {\r
+ try {\r
+ if (launch == null)\r
+ return;\r
+ IResource[] resources = launch.getLaunchConfiguration()\r
+ .getMappedResources();\r
+ if (resources == null)\r
+ return;\r
+ if (resources.length > 0) {\r
+ IResource propertiesFile = resources[0];\r
+ if (propertiesFile.getParent() == null)\r
+ return;\r
+ propertiesFile.getParent().refreshLocal(\r
+ IResource.DEPTH_INFINITE, null);\r
+ // System.out.println("Refreshed "\r
+ // + propertiesFile.getParent());\r
+ }\r
+ } catch (CoreException e) {\r
+ e.printStackTrace();\r
+ }\r
+\r
+ }\r
+\r
+ }\r
+\r
+}\r