blob: d5ec0c21c4dc7679b6dbe542be7c0056a6d20896 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2009 David A Carlson.
* 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:
* David A Carlson (XMLmodeling.com) - initial API and implementation
*
* $Id$
*******************************************************************************/
package org.eclipse.mdht.uml.ui.navigator.internal.actions;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.core.resources.IFile;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.mdht.uml.common.ui.util.IResourceConstants;
import org.eclipse.mdht.uml.ui.navigator.UMLDomainNavigatorItem;
import org.eclipse.mdht.uml.ui.navigator.internal.l10n.Messages;
import org.eclipse.mdht.uml.ui.navigator.internal.plugin.Logger;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IObjectActionDelegate;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.navigator.CommonNavigator;
import org.eclipse.uml2.uml.Element;
/**
*
*/
public class OpenModelAction implements IObjectActionDelegate {
private IWorkbenchPart activePart;
private List files = new ArrayList();
public void setActivePart(IAction action, IWorkbenchPart targetPart) {
activePart = targetPart;
}
public void selectionChanged(IAction action, ISelection selection) {
files = new ArrayList();
IStructuredSelection sSelection = (IStructuredSelection) selection;
for (Iterator iterator = sSelection.iterator(); iterator.hasNext();) {
IFile file = (IFile) iterator.next();
files.add(file);
}
action.setEnabled(!files.isEmpty());
}
public boolean isEnabled() {
return !files.isEmpty();
}
public void run(IAction action) {
EditingDomain editingDomain = TransactionalEditingDomain.Registry.INSTANCE.getEditingDomain(
IResourceConstants.EDITING_DOMAIN_ID);
for (Iterator iterator = files.iterator(); iterator.hasNext();) {
IFile modelFile = (IFile) iterator.next();
try {
Resource resource = editingDomain.getResourceSet().getResource(
URI.createPlatformResourceURI(modelFile.getFullPath().toString(), true), true);
if (activePart instanceof CommonNavigator) {
// expose the model contents in Project Explorer
List items = wrapItems(resource.getContents(), modelFile);
IStructuredSelection selection = new StructuredSelection(items);
((CommonNavigator) activePart).getCommonViewer().setSelection(selection, true);
}
} catch (Exception e) {
String message = NLS.bind(
Messages.OpenModelAction_errorMessage, new String[] { e.getLocalizedMessage() });
Logger.logException(message, e);
MessageDialog.openError(
Display.getDefault().getActiveShell(), Messages.OpenModelAction_errorTitle, message);
}
}
}
private List wrapItems(List items, Object parentElement) {
List wrappedItems = new ArrayList();
for (Iterator iter = items.iterator(); iter.hasNext();) {
Object item = iter.next();
if (item instanceof Element) {
wrappedItems.add(new UMLDomainNavigatorItem((Element) item, parentElement, null));
}
}
return wrappedItems;
}
}