blob: 7117f1a1e078478a3dae3d17afcd94d1525f3961 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2006 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ui.internal.editorsupport;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.eclipse.core.runtime.Platform;
import org.eclipse.swt.SWT;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.internal.util.BundleUtility;
import org.osgi.framework.Bundle;
/**
* This class provides an OS independent interface to the
* components available on the platform
*/
public final class ComponentSupport {
/**
* Returns whether the current platform has support
* for system in-place editor.
*/
public static boolean inPlaceEditorSupported() {
// only Win32 is supported
return SWT.getPlatform().equals("win32"); //$NON-NLS-1$
}
/**
* Return the default system in-place editor part
* or <code>null</code> if not support by platform.
*/
public static IEditorPart getSystemInPlaceEditor() {
if (inPlaceEditorSupported()) {
return getOleEditor();
}
return null;
}
/**
* Returns whether an in-place editor is available to
* edit the file.
*
* @param filename the file name in the system
*/
public static boolean inPlaceEditorAvailable(String filename) {
if (inPlaceEditorSupported()) {
return testForOleEditor(filename);
} else {
return false;
}
}
/**
* Get a new OLEEditor
* @return IEditorPart
*/
private static IEditorPart getOleEditor() {
// @issue currently assumes OLE editor is provided by IDE plug-in
// IDE plug-in is not on prereq chain of generic wb plug-in
// hence: IContributorResourceAdapter.class won't compile
// and Class.forName("org.eclipse.ui.internal.editorsupport.win32.OleEditor") won't find it
// need to be trickier...
Bundle bundle = Platform.getBundle("org.eclipse.ui.ide"); //$NON-NLS-1$
// it's not our job to activate the plug-in
if (!BundleUtility.isActivated(bundle)) {
return null;
}
try {
Class c = bundle
.loadClass("org.eclipse.ui.internal.editorsupport.win32.OleEditor"); //$NON-NLS-1$
return (IEditorPart) c.newInstance();
} catch (ClassNotFoundException exception) {
return null;
} catch (IllegalAccessException exception) {
return null;
} catch (InstantiationException exception) {
return null;
}
}
public static boolean testForOleEditor(String filename) {
int nDot = filename.lastIndexOf('.');
if (nDot >= 0) {
try {
String strName = filename.substring(nDot);
Class oleClass = Class.forName("org.eclipse.swt.ole.win32.OLE"); //$NON-NLS-1$
Method findMethod = oleClass.getDeclaredMethod(
"findProgramID", new Class[] { String.class }); //$NON-NLS-1$
strName = (String) findMethod.invoke(null,
new Object[] { strName });
if (strName.length() > 0) {
return true;
}
} catch (ClassNotFoundException exception) {
//Couldn't ask so return false
return false;
} catch (NoSuchMethodException exception) {
//Couldn't find the method so return false
return false;
} catch (IllegalAccessException exception) {
return false;
} catch (InvocationTargetException exception) {
return false;
}
}
return false;
}
}