| /******************************************************************************* |
| * Copyright (c) 2016 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 v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation |
| *******************************************************************************/ |
| package org.eclipse.capra.ui.zest; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| import java.util.stream.Collectors; |
| |
| import org.eclipse.capra.core.adapters.Connection; |
| import org.eclipse.capra.core.adapters.TraceMetaModelAdapter; |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.gef4.zest.fx.jface.IGraphContentProvider; |
| |
| /** |
| * |
| * This class provides the content to be displayed on the Zest view in form of a |
| * graph. It gets the traceability links and forms a graph with the connected |
| * elements as nodes and the traceability links as edges. |
| * |
| */ |
| public class TraceNodeContentProvider implements IGraphContentProvider { |
| |
| private TraceMetaModelAdapter metaModelAdapter; |
| private EObject traceModel = null; |
| private List<Connection> connections = new ArrayList<>(); |
| private List<Object> currentSelection = null; |
| |
| /** |
| * This constructor gets the trace model, traceMetamodel adapter and the |
| * list of selected objects by the user and sets them to the private |
| * variables of the class |
| * |
| * @param traceModel |
| * the current trace model |
| * @param metaModelAdapter |
| * the metamodel adapter |
| * @param element |
| * the current selection |
| */ |
| public TraceNodeContentProvider(EObject traceModel, TraceMetaModelAdapter metaModelAdapter, List<Object> element) { |
| this.traceModel = traceModel; |
| this.currentSelection = element; |
| this.metaModelAdapter = metaModelAdapter; |
| |
| } |
| |
| @Override |
| public Object[] getAdjacentNodes(Object node) { |
| List<EObject> nodes = new ArrayList<>(); |
| |
| if (node instanceof EObject) { |
| EObject object = (EObject) node; |
| connections = metaModelAdapter.getConnectedElements(object, traceModel); |
| for (Connection c : connections) { |
| nodes.addAll(c.getTargets()); |
| } |
| } |
| return nodes.toArray(); |
| } |
| |
| @Override |
| public Object[] getNestedGraphNodes(Object node) { |
| return null; |
| } |
| |
| @Override |
| public Object[] getNodes() { |
| List<EObject> nodes = new ArrayList<>(); |
| if (currentSelection.get(0) instanceof EObject) { |
| EObject object = (EObject) currentSelection.get(0); |
| int transitivityDepth = 0; |
| connections = metaModelAdapter.getTransitivelyConnectedElements(object, traceModel, transitivityDepth); |
| for (Connection c : connections) { |
| nodes.add(c.getOrigin()); |
| nodes.addAll(c.getTargets()); |
| } |
| } |
| // return only distinct values as nodes of the graph |
| return nodes.stream().distinct().collect(Collectors.toList()).toArray(); |
| |
| } |
| |
| @Override |
| public boolean hasNestedGraph(Object node) { |
| return false; |
| } |
| |
| } |