/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.gui.workflow.editor.connections;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.TreeItem;
import de.rcenvironment.core.component.workflow.model.api.WorkflowNode;
import de.rcenvironment.core.gui.workflow.EndpointContentProvider.Endpoint;
/**
* The TreeViewer to display components, one additional method to find an item by path.
*
* @author Heinrich Wendel
* @author Doreen Seider
*/
public class EndpointTreeViewer extends TreeViewer {
/**
* Constructor.
*
* @param parent See parent.
* @param style See parent.
*/
public EndpointTreeViewer(Composite parent, int style) {
super(parent, style);
addDoubleClickListener(new IDoubleClickListener() {
@Override
public void doubleClick(DoubleClickEvent event) {
TreeViewer viewer = (TreeViewer) event.getViewer();
IStructuredSelection thisSelection = (IStructuredSelection) event.getSelection();
Object selectedNode = thisSelection.getFirstElement();
viewer.setExpandedState(selectedNode, !viewer.getExpandedState(selectedNode));
}
});
}
/**
* Locates the TreeItem associated with a given Endpoint.
*
* @param node The parent WorkflowNode.
* @param name The Endpoint name.
* @return The associated TreeItem.
*/
public TreeItem findEndpoint(WorkflowNode node, String name) {
TreeItem foundItem = null;
for (TreeItem item: this.getTree().getItems()) {
if (item.getData().equals(node)) {
foundItem = item;
if (item.getExpanded()) {
for (TreeItem child: item.getItems()) {
TreeItem endpoint = findEndpoint(child, name);
if (endpoint != null) {
foundItem = endpoint;
break;
}
}
}
}
}
return foundItem;
}
private TreeItem findEndpoint(TreeItem item, String name) {
TreeItem matchingItem = null;
if (item.getData() instanceof Endpoint) {
if (((Endpoint) item.getData()).getName().equals(name)) {
return item;
}
}
return matchingItem;
}
}