package jqian.slicer.plugin;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Iterator;
//import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
public class SelectionResolver {
public static Object getAdapter(Object adaptable, Class<?> c) {
if (c.isInstance(adaptable)) {
return adaptable;
}
if (adaptable instanceof IAdaptable) {
IAdaptable a = (IAdaptable) adaptable;
Object adapter = a.getAdapter(c);
if (c.isInstance(adapter)) {
return adapter;
}
}
return null;
}
private static Object[] getSelectedResources(IStructuredSelection selection,Class<?> c) {
return getSelectedAdaptables(selection, c);
}
private static Object[] getSelectedAdaptables(ISelection selection, Class<?> c) {
ArrayList<Object> result = null;
if (!selection.isEmpty()) {
result = new ArrayList<Object>();
Iterator<?> elements = ((IStructuredSelection) selection).iterator();
while (elements.hasNext()) {
Object adapter = getAdapter(elements.next(), c);
if (c.isInstance(adapter)) {
result.add(adapter);
}
}
}
if (result != null && !result.isEmpty()) {
return result.toArray((Object[]) Array.newInstance(c, result.size()));
}
return (Object[]) Array.newInstance(c, 0);
}
public static IResource getSelectedResource(ISelection selection,int kind){
IResource[] rs = (IResource[]) getSelectedResources(
(IStructuredSelection) selection, IResource.class);
IResource result = null;
for (int i = 0; i < rs.length; i++) {
IResource r = rs[i];
if (r.getType() == kind) {
result = r;
break;
}
}
return result;
}
}