package org.xtext.example.usages.ui.handler;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandler;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.handlers.HandlerUtil;
import org.eclipse.xtext.ui.resource.IResourceSetProvider;
import org.xtext.example.repository.ModelRepository;
import org.xtext.example.usages.usages.Model;
import com.google.inject.Inject;
public class Test1Handler extends AbstractHandler implements IHandler {
@Inject
IResourceSetProvider resourceSetProvider;
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
ISelection selection = HandlerUtil.getCurrentSelection(event);
if (selection instanceof IStructuredSelection) {
IStructuredSelection structuredSelection = (IStructuredSelection) selection;
Object firstElement = structuredSelection.getFirstElement();
if (firstElement instanceof IFile) {
IFile file = (IFile) firstElement;
IProject project = file.getProject();
URI uri = URI.createPlatformResourceURI(file.getFullPath().toString(), true);
Model model1 = getModelViaResourceSetProviderInjectedIntoThisPlugin(project, uri);
String name1 = model1.getUsages().get(0).getDefinition().getName();
Model model2 = (Model) ModelRepository.getModel(project, uri);
String name2 = model2.getUsages().get(0).getDefinition().getName();
IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
MessageDialog.openInformation(window.getShell(), "Test",
"Name from ModelViaResourceSetProviderInjectedIntoThisPlugin: " + name1 + "\n"
+ "Name from ModelRespository: " + name2);
}
}
return null;
}
private Model getModelViaResourceSetProviderInjectedIntoThisPlugin(IProject project, URI uri) {
ResourceSet rs = resourceSetProvider.get(project);
Resource r = rs.getResource(uri, true);
Model m = (Model) r.getContents().get(0);
return m;
}
@Override
public boolean isEnabled() {
return true;
}
}