blob: 3a88ae68bccb1712f4cffe267d10651fff8feef9 [file] [log] [blame]
/*******************************************************************************
* <copyright>
*
* Copyright (c) 2005, 2011 SAP AG.
* 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:
* SAP AG - initial API, implementation and documentation
* Patch 203186 from Bug 357411 contributed by Hernan Gonzalez
*
* </copyright>
*
*******************************************************************************/
package org.eclipse.graphiti.ui.internal.util;
import java.lang.reflect.Method;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.graphiti.internal.util.T;
import org.eclipse.swt.dnd.Transfer;
/**
* In this class, we combine all reflection code introduced to make Graphiti run
* in a lean RCP setup, that is, for instance without org.eclipse.ui.ide
* installed. An alternative would be to use extension points which seems to be
* rather heavy-weight.
*/
public class ReflectionUtil {
private static final String CLASSNAME_RESOURCE_TRANSFER = "org.eclipse.ui.part.ResourceTransfer"; //$NON-NLS-1$
private static final String METHODNAME_RESOURCE_TRANSFER = "getInstance"; //$NON-NLS-1$
/**
* Typical scenario: input instance of IFileEditorInput
* We don't want to depend on that interface, as it resides in org.eclipse.ui.ide.
* We need to support an RCP scenario without having this plug-in installed.
*/
public static IFile getFile(Object input) {
IFile file = null;
if (input instanceof IAdaptable) {
file = (IFile) ((IAdaptable) input).getAdapter(IFile.class);
}
return file;
}
/**
* ResourceTransfer resides in org.eclipse.ui.ide. We need to support an RCP
* scenario without having this plug-in installed. Therefore ashamed we use
* dynamic class-loading and reflection.
*/
public static Transfer getResourceTransfer() {
Transfer resourceTransfer = null;
try {
Class<?> forName = Class.forName(CLASSNAME_RESOURCE_TRANSFER);
Method method = forName.getMethod(METHODNAME_RESOURCE_TRANSFER);
Object obj = method.invoke(forName);
if (obj != null && obj instanceof Transfer)
resourceTransfer = (Transfer) obj;
} catch (Exception e) {
T.racer().debug(e.getMessage());
}
return resourceTransfer;
}
}