blob: 402cc4a7a7c699c7f8169e83f314bfb59338957f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 Zoltan Ujhelyi and Daniel Varro.
* 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:
* Zoltan Ujhelyi - initial API and implementation
*******************************************************************************/
package org.eclipse.viatra2.visualisation.modelspace.actions;
import java.util.List;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PlatformUI;
import org.eclipse.viatra2.core.IModelElement;
import org.eclipse.viatra2.core.IModelManager;
import org.eclipse.viatra2.framework.IFramework;
import org.eclipse.viatra2.logger.Logger;
import org.eclipse.viatra2.treeeditor.actions.ViatraTreeEditorSelectionAction;
import org.eclipse.viatra2.visualisation.IVisualisationDescriptor;
import org.eclipse.viatra2.visualisation.modelspace.ModelSpaceVisualisationDescriptor;
import org.eclipse.viatra2.visualisation.view.ViatraVisualisationView;
/**
* Describes an abstract element visualisation action.
* @author Zoltan Ujhelyi
*/
public abstract class VisualiseSelectedElementAction extends
ViatraTreeEditorSelectionAction {
/**
* Contains the ID of the graph visualiser view
*/
public static final String ID_VIEW = "org.eclipse.viatra2.visualisation.view";
ViatraVisualisationView view;
ModelSpaceVisualisationDescriptor descriptor;
/**
* Initializes the abstract action
*/
public VisualiseSelectedElementAction() {
super();
setText("Graph Visualisation");
setToolTipText("");
setImageDescriptor(PlatformUI.getWorkbench().getSharedImages()
.getImageDescriptor(ISharedImages.IMG_OBJ_ELEMENT));
}
/**
* Initializes the abstract action
* @param part
*/
public VisualiseSelectedElementAction(IWorkbenchPart part) {
super(part);
}
@Override
public void run() {
@SuppressWarnings("unchecked")
List<IModelElement> selectedObjects = getSelectedObjects().toList();
IModelElement element = selectedObjects.get(0);
IFramework framework = element.getModelSpace().getFramework();
Logger log = framework.getLogger();
IModelManager manager = framework.getTopmodel().getModelManager();
if (manager == null) {
log.error("***The machine is not connected to a Model Space***");
return;
}
view = ViatraVisualisationView.openView();
IVisualisationDescriptor newDescriptor = view.getDescriptor(framework);
if (newDescriptor == null || !(newDescriptor instanceof ModelSpaceVisualisationDescriptor)) {
descriptor = new ModelSpaceVisualisationDescriptor();
view.setDescriptor(framework, descriptor);
descriptor.setFramework(framework);
descriptor.setModelManager(manager);
} else {
descriptor = (ModelSpaceVisualisationDescriptor) newDescriptor;
IModelManager oldManager = descriptor.getModelManager();
if (oldManager != null && !manager.equals(oldManager)) {
if (!MessageDialog.openConfirm(PlatformUI.getWorkbench().getDisplay()
.getActiveShell(), "Graph overwrite", "Another model space is already visualised. Do you want to overwrite it?")) {
return;
}
descriptor.setFramework(framework);
descriptor.setModelManager(manager);
} else if (oldManager == null) {
descriptor.setFramework(framework);
descriptor.setModelManager(manager);
}
}
loadFilterData(view, selectedObjects);
descriptor.redrawGraph();
}
@Override
public void updateSelf() {
if (getSelectedObjects().size()!=1) setEnabled(false);
else setEnabled(true);
}
/**
* Loads a filter of a list of elements
* @param view the view to load the information
* @param elements the list of elements to be loaded
*/
abstract void loadFilterData(ViatraVisualisationView view, List<IModelElement>elements);
}