| /******************************************************************************* |
| * Copyright (c) 2016, 2019 Chalmers | University of Gothenburg, rt-labs and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v2.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v20.html |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Contributors: |
| * Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation |
| * Chalmers | University of Gothenburg - additional features, updated API |
| *******************************************************************************/ |
| package org.eclipse.capra.ui.zest; |
| |
| import java.util.List; |
| |
| import org.eclipse.capra.core.adapters.TraceMetaModelAdapter; |
| import org.eclipse.capra.core.adapters.TracePersistenceAdapter; |
| import org.eclipse.capra.core.helpers.ExtensionPointHelper; |
| import org.eclipse.capra.ui.helpers.SelectionSupportHelper; |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.emf.ecore.resource.ResourceSet; |
| import org.eclipse.gef4.common.adapt.inject.AdapterInjectionSupport; |
| import org.eclipse.gef4.common.adapt.inject.AdapterInjectionSupport.LoggingMode; |
| import org.eclipse.gef4.layout.ILayoutAlgorithm; |
| import org.eclipse.gef4.layout.algorithms.TreeLayoutAlgorithm; |
| import org.eclipse.gef4.zest.fx.jface.ZestContentViewer; |
| import org.eclipse.gef4.zest.fx.jface.ZestFxJFaceModule; |
| import org.eclipse.jface.viewers.ISelection; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.ui.ISelectionListener; |
| import org.eclipse.ui.IWorkbenchPart; |
| import org.eclipse.ui.part.ViewPart; |
| |
| /** |
| * This class creates the view to hold the content of the model displayed as a |
| * graph in the Zest view. The view is connected to the model using a content |
| * provider. |
| * <p> |
| * The view uses a label provider to define how model objects should be |
| * presented in the view. Each view can present the same model objects using |
| * different labels and icons, if needed. Alternatively, a single label provider |
| * can be shared between views in order to ensure that objects of the same type |
| * are presented in the same way everywhere. |
| * <p> |
| */ |
| public class ZestView extends ViewPart { |
| |
| static ZestContentViewer viewer = null; |
| private ISelectionListener selectionListener; |
| |
| public class ZestViewModule extends ZestFxJFaceModule { |
| @Override |
| protected void enableAdapterMapInjection() { |
| install(new AdapterInjectionSupport(LoggingMode.PRODUCTION)); |
| } |
| } |
| |
| @Override |
| public void createPartControl(Composite parent) { |
| |
| TracePersistenceAdapter tracePersistenceAdapter; |
| |
| tracePersistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get(); |
| |
| viewer = new ZestContentViewer(new ZestViewModule()); |
| viewer.createControl(parent, SWT.NONE); |
| viewer.setLabelProvider(new TraceNodeLabelProvider()); |
| ILayoutAlgorithm layout = new TreeLayoutAlgorithm(); |
| viewer.setLayoutAlgorithm(layout); |
| |
| selectionListener = new ISelectionListener() { |
| |
| @Override |
| public void selectionChanged(IWorkbenchPart part, ISelection selection) { |
| EObject traceModel; |
| TraceMetaModelAdapter metaModelAdapter; |
| ResourceSet resourceSet; |
| |
| List<Object> selectedModels = SelectionSupportHelper.extractSelectedElements(selection, part); |
| |
| if (selectedModels.size() >= 1 && selectedModels.get(0) instanceof EObject) { |
| EObject selectedEObject = (EObject) selectedModels.get(0); |
| resourceSet = selectedEObject.eResource().getResourceSet(); |
| traceModel = tracePersistenceAdapter.getTraceModel(resourceSet); |
| metaModelAdapter = ExtensionPointHelper.getTraceMetamodelAdapter().get(); |
| viewer.setContentProvider( |
| new TraceNodeContentProvider(traceModel, metaModelAdapter, selectedModels)); |
| viewer.setInput(null); |
| viewer.refresh(); |
| |
| } |
| // TODO Implement what should be displayed when more than one |
| // element has been selected |
| } |
| |
| }; |
| getViewSite().getPage().addSelectionListener(selectionListener); |
| |
| } |
| |
| @Override |
| public void dispose() { |
| getSite().getPage().removeSelectionListener(selectionListener); |
| super.dispose(); |
| } |
| |
| @Override |
| public void setFocus() { |
| // TODO Auto-generated method stub |
| |
| } |
| } |