package org.eclipselabs.spray.xtext.ui.commands;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.handlers.HandlerUtil;
import org.eclipse.ui.part.FileEditorInput;
public class ActivateExtension extends AbstractHandler {
private SprayJavaProjectUtil projectUtil = new SprayJavaProjectUtil();
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
IStructuredSelection selection = (IStructuredSelection) HandlerUtil.getCurrentSelection(event);
ICompilationUnit cu = (ICompilationUnit) selection.getFirstElement();
IPackageFragmentRoot pfRoot = projectUtil.getPackageFragmentRoot(cu);
if (projectUtil.isGeneratedExtensionFile(cu)) {
IJavaProject project = pfRoot.getJavaProject();
try {
IPackageFragmentRoot srcFolder = projectUtil.getSrcManPackageFragmentRoot(project);
IPath targetPath = srcFolder.getPath().append(cu.getPath().makeRelativeTo(pfRoot.getPath()));
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
// assure intermediate packages exist
for (int i = 2; i < targetPath.segmentCount() - 1; i++) {
if (!root.exists(targetPath.removeLastSegments(targetPath.segmentCount() - 1 - i))) {
root.getFolder(targetPath.removeLastSegments(targetPath.segmentCount() - 1 - i)).create(true, true, new NullProgressMonitor());
}
}
cu.getResource().move(targetPath, true, new NullProgressMonitor());
root.findMember(targetPath).setDerived(false, new NullProgressMonitor());
IFile targetFile = (IFile) root.findMember(targetPath);
IEditorInput editorInput = new FileEditorInput(targetFile);
IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
IWorkbenchPage page = window.getActivePage();
page.openEditor(editorInput, "org.eclipse.jdt.ui.CompilationUnitEditor");
//cu.move(srcFolder, null, null, false, new NullProgressMonitor());
} catch (CoreException e) {
throw new ExecutionException(e.getMessage(), e);
}
} else {
}
return null;
}
protected IFolder getSrcManFolder(final IProject builtProject) {
// TODO: Respect spray properties
return builtProject.getFolder("src");
}
}