blob: 18993bd5b1af39fcb216ba3dbd756579b475af71 [file] [log] [blame]
/*******************************************************************************
* 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;
}
}