1) Fixed issue #776.
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.quantum.sql / src / com / quantum / util / versioning / VersioningHelper.java
index 1f3bacf..de069b9 100644 (file)
@@ -1,11 +1,23 @@
 package com.quantum.util.versioning;
 
+import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ImageRegistry;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.graphics.FontData;
 import org.eclipse.swt.widgets.FontDialog;
+import org.eclipse.ui.IKeyBindingService;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPartSite;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.actions.ExportResourcesAction;
+import org.eclipse.ui.actions.ImportResourcesAction;
+import org.eclipse.ui.part.ViewPart;
+import org.eclipse.ui.part.WorkbenchPart;
 
 /**
  * This class provides backward compatibility between versions of Eclipse for
@@ -15,7 +27,10 @@ import org.eclipse.swt.widgets.FontDialog;
  */
 public class VersioningHelper {
     
+    public static final int ECLIPSE_VERSION_2_0_1 = 2049;
     public static final int ECLIPSE_VERSION_2_1_1 = 2135;
+    public static final int ECLIPSE_VERSION_3_0_RC1 = 3054;
+    public static final int ECLIPSE_VERSION_3_0_RC3 = 3061;
 
     /**
      * Set the font in a FontDialog.  In Eclipse 2.1.1, the 
@@ -46,4 +61,156 @@ public class VersioningHelper {
             // should not happen
         }
     }
+    
+    public static void setPartName(ViewPart viewPart, String partName) {
+        try {
+            if (SWT.getVersion() >= ECLIPSE_VERSION_3_0_RC1) {
+                Method method = WorkbenchPart.class.getDeclaredMethod(
+                    "setPartName", new Class[] { String.class });
+                method.invoke(viewPart, new Object[] {partName});
+            } else {
+                Method method = WorkbenchPart.class.getDeclaredMethod(
+                    "setTitle", new Class[] { FontData.class });
+                method.invoke(method, new Object[] { partName });
+            }
+        } catch (NoSuchMethodException e) {
+            // should not happen
+        } catch (IllegalArgumentException e) {
+            // should not happen
+        } catch (IllegalAccessException e) {
+            // should not happen
+        } catch (InvocationTargetException e) {
+            // should not happen
+        }
+    }
+    
+    public static ExportResourcesAction createExportResourcesAction(IWorkbenchWindow window) {
+       ExportResourcesAction action = null;
+       
+       try {
+               if (isEclipse21OrHigher()) {
+                       Constructor constructor = ExportResourcesAction.class.getConstructor(
+                               new Class[] { IWorkbenchWindow.class });
+                       action = (ExportResourcesAction) constructor.newInstance(
+                               new Object[] { window });
+               } else {
+                       Constructor constructor = ExportResourcesAction.class.getConstructor(
+                               new Class[] { IWorkbench.class });
+                       action = (ExportResourcesAction) constructor.newInstance(
+                               new Object[] { window.getWorkbench() });
+               }
+        } catch (NoSuchMethodException e) {
+            // should not happen
+        } catch (IllegalArgumentException e) {
+            // should not happen
+        } catch (IllegalAccessException e) {
+            // should not happen
+        } catch (InvocationTargetException e) {
+            // should not happen
+        } catch (InstantiationException e) {
+            // should not happen
+        }
+       return action;
+    }
+    
+    public static ImportResourcesAction createImportResourcesAction(IWorkbenchWindow window) {
+       ImportResourcesAction action = null;
+       
+       try {
+               if (isEclipse21OrHigher()) {
+                       Constructor constructor = ImportResourcesAction.class.getConstructor(
+                               new Class[] { IWorkbenchWindow.class });
+                       action = (ImportResourcesAction) constructor.newInstance(
+                               new Object[] { window });
+               } else {
+                       Constructor constructor = ImportResourcesAction.class.getConstructor(
+                               new Class[] { IWorkbench.class });
+                       action = (ImportResourcesAction) constructor.newInstance(
+                               new Object[] { window.getWorkbench() });
+               }
+        } catch (NoSuchMethodException e) {
+            // should not happen
+        } catch (IllegalArgumentException e) {
+            // should not happen
+        } catch (IllegalAccessException e) {
+            // should not happen
+        } catch (InvocationTargetException e) {
+            // should not happen
+        } catch (InstantiationException e) {
+            // should not happen
+        }
+       return action;
+    }
+
+    public static void registerActionToKeyBindingService(
+       IWorkbenchPartSite site, String[] scopes, IAction action) {
+               
+       try {
+               if (isEclipse21OrHigher()) {
+                Method method = IWorkbenchPartSite.class.getMethod(
+                    "getKeyBindingService", new Class[0]);
+                IKeyBindingService service = (IKeyBindingService) method.invoke(site, null);
+                
+                method = IKeyBindingService.class.getMethod(
+                       "setScopes", new Class[] { String[].class });
+                method.invoke(service, new Object[] { scopes});
+                
+                       service.registerAction(action);
+               }
+        } catch (NoSuchMethodException e) {
+            // should not happen
+        } catch (IllegalArgumentException e) {
+            // should not happen
+        } catch (IllegalAccessException e) {
+            // should not happen
+        } catch (InvocationTargetException e) {
+            // should not happen
+        }
+    }
+    
+    public static void main(String[] args) {
+       System.out.println(SWT.getVersion());
+    }
+
+       /**
+        * @return
+        */
+       public static boolean isEclipse30() {
+               return SWT.getVersion() >= 3000;
+       }
+
+       /**
+        * @return
+        */
+       public static boolean isEclipse21OrHigher() {
+               return SWT.getVersion() >= 2100;
+       }
+       /**
+        * Method getDescriptor.
+        * @param registry
+        * @param imageName
+        * @return ImageDescriptor
+        */
+       public static ImageDescriptor getDescriptor(
+               ImageRegistry registry,
+               String imageName) {
+               ImageDescriptor descriptor = null;
+        try {
+            if (isEclipse21OrHigher()) {
+                Method method = ImageRegistry.class.getMethod(
+                    "getDescriptor", new Class[] { String.class });
+                descriptor = (ImageDescriptor) method.invoke(registry, new Object[] {imageName});
+            }
+        } catch (NoSuchMethodException e) {
+            // should not happen
+        } catch (IllegalArgumentException e) {
+            // should not happen
+        } catch (IllegalAccessException e) {
+            // should not happen
+        } catch (InvocationTargetException e) {
+            // should not happen
+        }
+        return descriptor;
+       }
+
 }