/*******************************************************************************
* Copyright (c) 2007, 2008 Borland Software Corporation and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Borland Software Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.m2m.internal.qvt.oml.runtime.ui.trace.actions;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.m2m.internal.qvt.oml.ast.parser.QvtOperationalTypesUtil;
import org.eclipse.m2m.internal.qvt.oml.emf.util.EmfUtil;
import org.eclipse.m2m.internal.qvt.oml.emf.util.Logger;
import org.eclipse.m2m.internal.qvt.oml.emf.util.ui.choosers.IMetamodelHandler;
import org.eclipse.m2m.internal.qvt.oml.emf.util.ui.choosers.MetamodelHandlerManager;
import org.eclipse.m2m.internal.qvt.oml.runtime.ui.trace.presentation.EObjectNode;
import org.eclipse.m2m.internal.qvt.oml.trace.TracePackage;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.ui.IWorkbenchPage;
public class OpenEObjectAction extends Action {
private final IWorkbenchPage myPage;
private final Tree myTree;
public OpenEObjectAction(IWorkbenchPage page, Tree tree) {
myPage = page;
myTree = tree;
}
@Override
public void run() {
TreeItem[] selection = myTree.getSelection();
for (TreeItem treeItem : selection) {
Object data = treeItem.getData();
if (false == data instanceof EObjectNode) {
continue;
}
EObjectNode eObjectNode = (EObjectNode) data;
EObject eObject = eObjectNode.getObject();
if (EcoreUtil.getRootContainer(eObject).eClass().eContainer() == TracePackage.eINSTANCE) {
MessageDialog.openWarning(getShell(), Messages.OpenEObjectAction_UnboundObjectTitle, NLS.bind(
Messages.OpenEObjectAction_UnboundObjectMsg, QvtOperationalTypesUtil.getTypeFullName(eObject.eClass())));
return;
}
EPackage ePackage = eObject.eClass().getEPackage();
String nsURI = EmfUtil.getRootPackage(ePackage).getNsURI();
IMetamodelHandler handler = MetamodelHandlerManager.getInstance().getHandler(nsURI);
try {
handler.getSaver().select(eObject, myPage);
}
catch (Exception e) {
Logger.getLogger().log(Logger.SEVERE, "Failed to select " + eObject + " using " + handler, e); //$NON-NLS-1$//$NON-NLS-2$
}
}
}
private Shell getShell() {
return myPage.getActiveEditor().getSite().getShell();
}
}