/**
*
*/
package org.feature.transform.splot2fm.handler;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.log4j.Logger;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.ISelectionService;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchWindow;
import org.feature.transform.splot2fm.TransformationPlugin;
/**
* @author <a href="mailto:info@juliaschroeter.de">Julia Schroeter</a>
*
*/
public abstract class AbstractGenCommandHandler extends AbstractHandler {
private static Logger log = Logger.getLogger(AbstractGenCommandHandler.class);
protected List<IFile> getFilesFromWorkspace(){
IWorkbench workbench = TransformationPlugin.getDefault().getWorkbench();
List<IFile> files = new ArrayList<IFile>(5);
if (workbench != null) {
IWorkbenchWindow wbWindow = workbench.getActiveWorkbenchWindow();
if (wbWindow != null) {
ISelectionService selectService = wbWindow.getSelectionService();
if (selectService != null) {
ISelection selection = selectService.getSelection();
if (selection instanceof IStructuredSelection) {
IStructuredSelection structSelection = (IStructuredSelection) selection;
List< ? > selected = structSelection.toList();
for (Iterator< ? > iterator = selected.iterator(); iterator.hasNext();) {
Object element = (Object) iterator.next();
if (element instanceof IAdaptable) {
IAdaptable adaptable = (IAdaptable) element;
IResource resource = (IResource) adaptable.getAdapter(IResource.class);
try {
files.addAll(getFiles(resource));
} catch (CoreException e) {
log.error("Could not load members of resource '" + resource + "'.");
e.printStackTrace();
}
}
}
}
}
}
}
return files;
}
private List<IFile> getFiles(IResource resource) throws CoreException {
List<IFile> files = new ArrayList<IFile>(2);
if (resource != null) {
if (resource instanceof IFile) {
IFile file = (IFile) resource;
files.add(file);
} else if (resource instanceof IFolder) {
IFolder folder = (IFolder) resource;
IResource[] folderMember = folder.members();
for (IResource iResource : folderMember) {
files.addAll(getFiles(iResource));
}
} else if (resource instanceof IProject){
IProject project = (IProject) resource;
IResource[] members = project.members();
for (IResource iResource : members) {
files.addAll(getFiles(iResource));
}
}
}
return files;
}
}