blob: 308b7bba76157e07557ba67f7098e337d2ccba7f [file] [log] [blame]
package org.eclipse.gmf.codegen.xtend.ui.handlers;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.common.NotDefinedException;
import org.eclipse.core.resources.IFile;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.xmi.XMIResource;
import org.eclipse.gmf.codegen.gmfgen.GenEditorGenerator;
import org.eclipse.jface.viewers.TreeSelection;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.handlers.HandlerUtil;
public class ExecuteTemplatesWithXtend2Handler extends AbstractHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
ExecuteTemplatesOperationWithXtend2 op = createOperation(event);
op.run();
return null;
}
@Override
public boolean isEnabled() {
return true;
}
private ExecuteTemplatesOperationWithXtend2 createOperation(ExecutionEvent event) throws ExecutionException {
ExecuteTemplatesOperationWithXtend2 op = new ExecuteTemplatesOperationWithXtend2();
try{
op.setName(event.getCommand().getName());
} catch(NotDefinedException e) {
throw new RuntimeException("Undefined command",e);
}
Shell shell = HandlerUtil.getActiveShell(event);
op.setShell(shell);
if (HandlerUtil.getCurrentSelectionChecked(event) instanceof TreeSelection) {
TreeSelection selection = (TreeSelection)HandlerUtil.getCurrentSelectionChecked(event);
if (selection.size() == 1) {
if (selection.getFirstElement() instanceof GenEditorGenerator) {
op.setGenModelURI(((XMIResource)selection.getPaths()[0].getFirstSegment()).getURI());
} else {
op.setGenModelURI(URI.createPlatformPluginURI(((IFile)selection.getFirstElement()).getFullPath().toString(), true));
}
} else {
throw new ExecutionException("Size of selection more than one.");
}
}
return op;
}
}